c# - 有必要在WPF MVVM中对ICommand类型的属性使用INotifyPropertyChanged吗?

标签 c# wpf mvvm inotifypropertychanged

这两个变量之间有区别吗(性能,内存泄漏或准则)?

使用NPC:

private ICommand mGoBackCommand;

    public ICommand GoBackCommand
    {
        get { return mGoBackCommand; }
        set
        {
            if (mGoBackCommand != value)
            {
                mGoBackCommand = value;
                RaisePropertyChanged("GoBackCommand");
            }
        }
    }

汽车属性:
public ICommand GoBackCommand {get; set;}

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

最佳答案

如果您正在编写一个实现INotifyPropertyChanged的类,那么您正在签订的契约(Contract)规定:“任何属性更改时,我都会引发PropertyChanged事件。”

但是,如果您知道某个属性在实例的生存期内不会更改,那么您就可以通过不为该属性提高PropertyChanged来轻松满足该契约(Contract)。

因此,如果您在构造函数中一次设置了一个属性(“设置为它忘记了”属性),那么您就不必只为了支持INotifyPropertyChanged而修改该属性,并且可以使用自动实现的属性。但是,在这种情况下,您应该从此更改属性:

public ICommand GoBackCommand { get; set; }

对此:
public ICommand GoBackCommand { get; private set; }

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

关于c# - 有必要在WPF MVVM中对ICommand类型的属性使用INotifyPropertyChanged吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530965/

相关文章:

wpf - 如何禁用 F4 键显示组合框中的项目

c# - UWP 的 MVVM 模式教程,但它不会绑定(bind)命令,为什么?

c# - 组合框默认值

c# - 在 wpf 中处理点击序列的最佳方法

c# - 如何在线程中捕获正确的变量

c# - 如何测试负零?

.net - 更改列表框项目的 WPF 数据模板(如果选择)

WPF 设计器在解析具有覆盖属性的通用控件时存在错误

c# - 有效比较位(x 的重叠集)

c# - 修剪或格式化 asp 网络超链接