在WPF MVVM中对ICommand类型的属性使用INotifyPropertyChanged是必要的吗?

Ale*_*der 0 c# wpf mvvm inotifypropertychanged

这两种变体(性能,内存泄漏或指南)之间是否存在差异?

NPC:

private ICommand mGoBackCommand;

    public ICommand GoBackCommand
    {
        get { return mGoBackCommand; }
        set
        {
            if (mGoBackCommand != value)
            {
                mGoBackCommand = value;
                RaisePropertyChanged("GoBackCommand");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

汽车财产:

public ICommand GoBackCommand {get; set;}
Run Code Online (Sandbox Code Playgroud)

UPD:最后一个问题是:我是否可以在VievModel中使用自动属性,如果它们是在构造函数中分配一次的简单命令,或者由于性能,内存泄漏或其他原因我需要在VM的每个属性上实现NPC?

Ric*_*key 6

如果您正在编写一个实现的类INotifyPropertyChanged,那么您正在签订一份合同,其中说" PropertyChanged当任何属性发生变化时,我会引发该事件."

但是,如果您知道某个属性在实例的生命周期内不会发生变化的事实,那么您通过永远不会PropertyChanged为该属性进行筹集来满足该合同.

因此,如果您在构造函数中设置一次属性("将其设置为忘记它"属性),那么您不需要破坏属性只是为了支持INotifyPropertyChanged,您可以使用自动实现的属性.但是,在此您应该更改此属性:

public ICommand GoBackCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)

对此:

public ICommand GoBackCommand { get; private set; }
Run Code Online (Sandbox Code Playgroud)

这样它就不会在课外被意外修改.