为什么有必要在WPF应用程序中调用PropertyChanged

时间:2017-02-14 11:01:29

标签: c# wpf

我正在开发我的第一个MVVM WPF应用程序。

在我视图中属性的所有模型代码中,我调用了IPropertyChanged的代码。我的代码有效,但我不明白我为什么要这样做。

为什么.NET不仅仅知道"财产价值发生了变化?为什么我必须显式调用PropertyChanged才能刷新UI?

2 个答案:

答案 0 :(得分:1)

当您打算在运行时动态设置源属性并希望视图为&#时,只需要实现INotifyPropertyChanged接口并为数据绑定属性引发PropertyChanged事件。 34;自动"通知此更改。

如果您不提出此事件,则无法知道WPF何时更新视图中的数据绑定值。

在幕后,WPF订阅此活动并自动处理视图中的刷新功能"自动"。您需要做的就是告诉它何时刷新目标属性,执行此操作的方法是实现INotifyPropertyChanged接口。

希望这能回答你的问题。

答案 1 :(得分:1)

你这里的观点不正确。 .NET不知道数据是否已更改。更改属性值只是将新内容放入内存位置。没有办法让代码的任何其他部分,包括框架(这只是一个公共代码)知道内存内容已经改变。

为了让别人知道,你通常会实现Observable模式。保存更改值的对象允许其他对象将自己添加到"观察者列表中。

// principal solution, not a real code
class DataClass
{
    List observers;

    public void Add(observer)
    {
        observers.Add(observer);
    }
}

然后,当它包含的值发生变化时,它会在每个观察者上调用一个方法:

// Again the principal code, not real solution
class DataClass
{
    private int data;

    public void SetData(int value)
    {
        data = value; // Nobody knows this has happened

        // And now the others should be notified
        foreach (observer in observers)
        {
            observer.NotifyDataChanged();
        }
    }
}

在WPF应用程序中,UI元素是观察者。您正在将它们与数据类连接起来。 INotifyPropertyChanged接口是在这种情况下实现Observable模式的正式方法。

您的数据类将使UI有机会注意到数据已被修改并相应地刷新UI控件的内容。