(三)应用图表开发(二)

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

posted @ 2024-05-06 13:23  huihui不会写代码  阅读(109)  评论(0)    收藏  举报