using GalaSoft.MvvmLight.Command; using LiveCharts; using LiveCharts.Wpf; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using C1.WPF.C1Chart; namespace FLY.HeatingHelper.UI.UIModule { /// /// UC_FramePicker.xaml 的交互逻辑 /// public partial class UC_FramePicker : UserControl { #region SelectedFrame属性 public static readonly DependencyProperty SelectedFrameProperty = DependencyProperty.Register( "SelectedFrame", typeof(Int32), typeof(UC_FramePicker), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnSelectedFrameChanged))); public Int32 SelectedFrame { get { return (Int32)GetValue(SelectedFrameProperty); } set { SetValue(SelectedFrameProperty, value); } } private static void OnSelectedFrameChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { UC_FramePicker control = (UC_FramePicker)obj; //RoutedPropertyChangedEventArgs e = new RoutedPropertyChangedEventArgs( // (decimal)args.OldValue, (decimal)args.NewValue, ValueChangedEvent); RoutedPropertyChangedEventArgs e = new RoutedPropertyChangedEventArgs( (decimal)args.OldValue, (decimal)args.NewValue); control.OnValueChanged(e); } protected virtual void OnValueChanged(RoutedPropertyChangedEventArgs args) { RaiseEvent(args); } #endregion #region MinFrame属性 public static readonly DependencyProperty MinFrameProperty = DependencyProperty.Register( "MinFrame", typeof(Int32), typeof(UC_FramePicker), new FrameworkPropertyMetadata()); public Int32 MinFrame { get { return (Int32)GetValue(MinFrameProperty); } set { SetValue(MinFrameProperty, value); } } #endregion #region MaxFrame属性 public static readonly DependencyProperty MaxFrameProperty = DependencyProperty.Register( "MaxFrame", typeof(Int32), typeof(UC_FramePicker), new FrameworkPropertyMetadata()); public Int32 MaxFrame { get { return (Int32)GetValue(MaxFrameProperty); } set { SetValue(MaxFrameProperty, value); } } #endregion public UC_FramePicker() { InitializeComponent(); //myChart.Data.Children } } public class UC_FramePickerViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public UC_FramePickerViewModel() { InitCmd(); } //ThickHeatData4SQLite_V1 _data; IThickHeatData _data; private int _selectedFrame; public int SelectedFrame { get { return _selectedFrame; } set { if (_selectedFrame != value) { _selectedFrame = value; UpdateData(); } } } private int _minFrame; public int MinFrame { get { return _minFrame; } set { if (_minFrame != value) { _minFrame = value; if (SelectedFrame < _minFrame) { SelectedFrame = _minFrame; } } } } private int _maxFrame; public int MaxFrame { get { return _maxFrame; } set { if (_maxFrame != value) { _maxFrame = value; if (SelectedFrame > _maxFrame) { SelectedFrame = _maxFrame; } } } } private int _resetBolt; public int ResetBolt { get { return _resetBolt; } set { if (_resetBolt != value) { _resetBolt = value; } } } private double _rotAngle = double.NaN; public double RotAngle { get { return _rotAngle; } set { if ((Math.Abs(_rotAngle - value) >= 0.00099) || double.IsNaN(_rotAngle)) { _rotAngle = value; } } } public RelayCommand PreCmd { get; internal set; } public RelayCommand NxtCmd { get; internal set; } public ChartData myData { get; set; } = new ChartData(); /// /// 初始化数据 /// /// public void InitData(object _dat, int from, int to) { _data = _dat as IThickHeatData; /*ThickHeatData4SQLite_V1*/ int update = 2; if (from > 0) { MinFrame = from; update--; } if ((to > from) && (to > 0)) { MaxFrame = to; SelectedFrame = to; update--; } if (update > 0) { UpdateData(); } } //private ChartValues v1 = new ChartValues(); //private ChartValues v2 = new ChartValues(); public DoubleCollection DS_thick { get; set; } public DoubleCollection DS_heat { get; set; } public void UpdateChart() { DS_thick = new DoubleCollection(_data.GetThicks(SelectedFrame, ResetBolt, RotAngle)); DS_heat = new DoubleCollection(_data.GetHeats(SelectedFrame, -1, -1)); //if (MySeries.Count == 0) //{ // var L1 = new LineSeries // { // Title = "厚度", // Values = v1, // DataLabels = false, // Fill = new SolidColorBrush(Colors.Transparent), // PointGeometrySize = 3, // ScalesYAt = 0, // }; // var L2 = new LineSeries // { // Title = "加热率", // Values = v2, // DataLabels = false, // Fill = new SolidColorBrush(Colors.Transparent), // PointGeometrySize = 3, // ScalesYAt = 1, // }; // MySeries.Add(L1); // MySeries.Add(L2); //} //v1.Clear(); v1.AddRange(_data.GetThicks(SelectedFrame, ResetBolt, RotAngle)); //v2.Clear(); v2.AddRange(_data.GetHeats(SelectedFrame, -1, -1)); } private void UpdateData() { ResetBolt = _data.GetResetBolt(SelectedFrame); RotAngle = _data.GetRotAngle(SelectedFrame); UpdateChart(); } public void InitCmd() { PreCmd = new RelayCommand(() => { if (SelectedFrame > MinFrame) { var tmp = _data.GetRelativeID(SelectedFrame, -1); if (tmp >= 0) SelectedFrame = tmp; } }); NxtCmd = new RelayCommand(() => { if (SelectedFrame < MaxFrame) { var tmp = _data.GetRelativeID(SelectedFrame, 1); if (tmp >= 0) SelectedFrame = tmp; } }); } } }