ScottPlot
![image]()
直接使用(4.1.58)
![image]()
MVVM绑定
![image]()
添加附加属性
//为什么需要这个对象
//因为页面中plot对象没有属性可以做绑定,提供图表数据
// <WpfPlot Grid.Row="1" b:ScottplotModel.Values="{Binding }" />
public class ScottplotModel
{
//附加属性
//WpfPlot就是DependencyObject obj传入的对象,根据它来获取这个属性的值
public static ObservableCollection<LvcModel> GetValues(DependencyObject obj)
{
return (ObservableCollection<LvcModel>)obj.GetValue(ValuesProperty);
}
public static void SetValues(DependencyObject obj, ObservableCollection<LvcModel> value)
{
obj.SetValue(ValuesProperty, value);
}
//重点,附加属性的声明
//从getvalues方法获取被附加 对象的附加values属性值
public static readonly DependencyProperty ValuesProperty =
DependencyProperty.RegisterAttached("Values", typeof(ObservableCollection<LvcModel>), typeof(ScottplotModel), new PropertyMetadata(null,new PropertyChangedCallback(OnValueChanged)));
//还不可以直接使用,需要做处理,这个value属性获取到的数据,提供给控件使用
//处理方案,监控value属性的变化,变化后进行控件方法的调用
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var datas= e.NewValue as ObservableCollection<LvcModel>;
//参数d 是属性附加的对象
var obj = d as WpfPlot;
List<double> dataList=new List<double>();
List<string> xList=new List<string>();
foreach (var item in datas.ToList())
{
dataList.Add(item.Value);
xList.Add(item.DateTime.ToString("mm:ss"));
}
//obj.plt已经弃用
obj.plt.AddSignal(dataList.ToArray());
obj.Refresh();
//探索,目前只处理了一个序列,如果出序列点数动态多个序列动态绑定如何实现
}
}
vm
![image]()