繁体   English   中英

C#绑定收到的数据

[英]C# binding received data

我有客户端服务器应用程序,客户端从服务器获取数据并将其保存在静态类中:

 public static class DataStructure
    {
        //! Значение каждой переменной
        public static Value AxisX = new Value(@"axis_x", Dividers.AxisX);
        public static Value AxisY = new Value(@"axis_y", Dividers.AxisY);
        public static Value AxisZ = new Value(@"axis_z", Dividers.AxisZ);
        public static Value Temp = new Value(@"temp", Dividers.Temp);
        public static Value GirX = new Value(@"gir_x", Dividers.GirX);
        public static Value GirY = new Value(@"gir_y", Dividers.GirY);
        public static Value GirZ = new Value(@"gir_z", Dividers.GirZ);
        ...

        public static List<Value> ListOfValues = new List<Value>
        {
            AxisX,
            AxisY,
            AxisZ,
            Temp,
            GirX,
            GirY,
            GirZ,
            ....
        }
        ...

客户端应用程序具有GUI(带有MVVM模式的WPF)。 客户端每隔1秒钟从服务器接收一次数据,这些数据必须显示在窗口中。 屏幕截图(点击)

如果需要的话,我必须使用RaisePropertyChanged() ,但是我不想干扰DataSctructure类并使用RaisePropertyChanged()创建属性。 最好的方法是什么? 我可以在ViewModel中创建很多属性(例如AxisXAxisY ,...),并从ListOfValues分配数据,但是我认为这是不合理的。

或者,可能是我必须更改应用程序的结构?

更新1:

    public class Value
        {
            public Value(string name, double divider = 1.0)
            {
                Name = name;
                Divider = divider;
                HexCode = string.Empty;
                IntValue = 1;
                PhysValue = 1.0;
            }

            public readonly string Name;
            public readonly double Divider;
            public string HexCode { get; private set; }
            public int IntValue { get; private set; }
            public double PhysValue { get; private set; }
}

例如在这里查看我的答案 :在这种情况下

public class Value: INotifyPropertyChanged
    {
       public event PropertyChangedEventHandler PropertyChanged;

       protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
       {
          //this.VerifyPropertyName(propertyName);

          PropertyChangedEventHandler handler = this.PropertyChanged;
          if (handler != null)
          {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
           }
        }

然后,如果Value是具有属性的类(例如IntValuePhysValue ,即至少具有吸气剂),则您已经具有可绑定到(只读)控件( DataGrid )的集合(列表)。

例如

private double physValue;        
public double PhysValue { 
  get { return physValue; } 
  set {
     physValue = value;
     RaisePropertyChanged();
  }
}

当然,您必须详细说明才能实现所需的屏幕截图

您可以将每个Value包装在视图模型的属性中,然后在其中调用PropertyChanged ,也可以修改DataStructure类以触发PropertyChanged 但是,您必须使DataStructure非静态的,才能对其实施INotifyPropertyChanged。

说到哪个,为什么要在静态类中存储可变数据? 那是一个非常糟糕的主意...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM