我有客户端 - 服务器应用程序,客户端从服务器获取数据并将其保存在静态类中:
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秒从服务器接收数据,并且必须在窗口中显示。 Screenshot (click)
如果我需要,我必须RaisePropertyChanged()
,但我不想干涉DataSctructure
课程并使用RaisePropertyChanged()
制作属性。最好的方法是什么?我可以在ViewModel中创建很多属性(例如AxisX
,AxisY
,...)并从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; }
}
答案 0 :(得分:1)
查看我answer here的实例:在这种情况下
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是一个具有属性的类(如IntValue
和PhysValue
,即至少使用getter),那么您已经拥有一个可绑定到(只读)控件的集合(列表) (a DataGrid
)。
例如
private double physValue;
public double PhysValue {
get { return physValue; }
set {
physValue = value;
RaisePropertyChanged();
}
}
当然,您必须详细说明如何实现所需的屏幕截图
答案 1 :(得分:0)
您可以将每个Value
打包在视图模型的属性中,然后在其中调用PropertyChanged
,也可以修改DataStructure
类以触发PropertyChanged
。但是,您必须使DataStructure
非静态,以便在其上实现INotifyPropertyChanged。
说到这,为什么要在静态类中存储可变数据?这是一个非常糟糕的主意......