>我在应用程序中使用MVVM
模式WPF
。我从通过USB通信与我的应用程序(桌面)通信的设备获取的数据。
这是我的 MVVM 结构:
在模型中:我正在从设备(在 WinCE 平台上运行)获取数据在这里,我创建了一个事件public event EventHandler<PropertyEventArgs> propertyChanged;
protected void RaisepropertyChangedEvent(PropertyEventArgs e)
{
if (this.propertyChanged != null)
{
this.propertyChanged(this, e);
}
}
public class PropertyEventArgs : EventArgs
{
public int lf { get; set; }
public int dateformat { get; set; }
public string pid { get; set; }
public int language { get; set; }
public int Line { get; set; }
public string Label { get; set;}
public int uValue { get; set; }
public int lvalue { get; set; }
public int lMethod { get; set; }
}
在视图模型中,我正在引发此事件:
当一些数据出现时,我会提出这个事件:
this.RaisepropertyChangedEvent(this.pargs);
在 UI 中:我已订阅此事件以更新 UI
this.eObj.propertyChanged += new EventHandler<PropertyEventArgs>(this.EpropertyChanged);
private void EpropertyChanged(object sender, PropertyEventArgs e)
{
this.OnPropertyChanged(new PropertyChangedEventArgs("linePercentage"));
this.OnPropertyChanged(new PropertyChangedEventArgs("Label"));
this.OnPropertyChanged(new PropertyChangedEventArgs("UL"));
this.OnPropertyChanged(new PropertyChangedEventArgs("LMethod"));
}
eobj
是我宣布Eventargs
的地方。
我面临的问题是,当属性的值发生变化时,所有属性都会被调用。
因此,有时会为某些参数设置错误的值。
请帮我解决这个问题。
如果我了解您想要什么,您可以缓存信息以了解更改的内容:
private PropertyEventArgs _oldState = null;
private void EpropertyChanged(object sender, PropertyEventArgs e)
{
if(_oldState == null || e.SomeProperty.CompareTo(linePercentage) != 0)
this.OnPropertyChanged(new PropertyChangedEventArgs("linePercentage"));
if(_oldState == null || e.Label.CompareTo(Label) != 0)
this.OnPropertyChanged(new PropertyChangedEventArgs("Label"));
if(_oldState == null || e.SomeProperty.CompareTo(UL) != 0)
this.OnPropertyChanged(new PropertyChangedEventArgs("UL"));
if(_oldState == null || e.lMethod.CompareTo(LMethod) != 0)
this.OnPropertyChanged(new PropertyChangedEventArgs("LMethod"));
...
_oldState = e;
}