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;
}
});
}
}
}