在一个集合中公开的模型中实现INotifyPropertyChanged

13 浏览
0 Comments

在一个集合中公开的模型中实现INotifyPropertyChanged

我有一个在ObservableCollection中暴露的Model类,该类使用DataTemplate设计,其中处理Model的属性绑定。\n当我在Model类中手动实现INotifyPropertyChanged接口时,ObservableCollection中的绑定属性不会自动更改,只有在重新渲染集合后才会改变。\n当我继承自ViewModelBase(一个MVVM Light工具包类)并使用RasiePropertyChanged方法时,绑定的属性会自动更改而无需刷新整个集合。\n除了实现INotifyPropertyChanged接口外,ViewModelBase还做了什么?

0
0 Comments

问题的原因是在MVVM Light Toolkit中,如果想要在一个模型中实现INotifyPropertyChanged接口,可以使用ViewModelBase类来帮助实现,这个类提供了一些额外的辅助功能。但是有时候我们只需要实现INotifyPropertyChanged接口,而不需要ViewModelBase类提供的其他功能。解决方法是可以直接从ObservableObject类继承,这个类也是来自于MVVM Light Toolkit,它只实现了INotifyPropertyChanged接口,没有其他额外的功能,因此非常适合用于模型。

在Visual Studio中查看ViewModelBase类的定义可以发现,它本身就是继承自ObservableObject类的。这说明ViewModelBase类不仅实现了INotifyPropertyChanged接口,还提供了其他功能。

下面是问题的解决方法:

using GalaSoft.MvvmLight;
public class MyModel : ObservableObject
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                RaisePropertyChanged("Name");
            }
        }
    }
}

在这个例子中,我们定义了一个名为MyModel的类,并让它继承自ObservableObject类。在MyModel类中,我们定义了一个名为Name的属性,当属性的值发生变化时,我们调用RaisePropertyChanged方法来触发PropertyChanged事件,通知界面属性值已经发生改变。

通过这种方式,我们可以很方便地在模型中实现INotifyPropertyChanged接口,而不需要自己手动编写大量的代码来实现属性变化的通知。这样可以大大简化开发过程,提高代码的可维护性和可读性。

总结起来,如果我们只需要在模型中实现INotifyPropertyChanged接口而不需要其他功能,可以直接从ObservableObject类继承。这样可以减少代码的编写量,并且提高代码的可维护性和可读性。

0