wpf - 如何从C#中的属性列表提高属性更改值

标签 wpf mvvm event-handling c#-3.0 propertychanged

我在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; }
}

在View模型中,我正在引发此事件:

当一些数据即将到来时,我将引发此事件:
this.RaisepropertyChangedEvent(this.pargs);

在用户界面中:我已将此事件订阅到Update 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;
}

关于wpf - 如何从C#中的属性列表提高属性更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38242709/

相关文章:

javascript - 以编程方式触发 D3 刷机事件

wpf - 将项目添加到 ListView 时触发的事件?

c# - System.Windows.Data 错误 : 1 System. Windows.Data 错误:5

c# - 如何从加载的图像文件而不是项目资源构建 SplashScreen

MVVM在所有 View 之间共享对象

asp.net-mvc - 'CreateMap' 语句应该去哪里?

java - 在哪里放置事件监听器?

javascript - JS浏览器事件处理

wpf - 可以将 XmlDataProvider 与 d :DataContext? 一起使用

c# - 简单的嵌套 TreeView Xaml 结构?