首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试着理解INotifyPropertyChanged

试着理解INotifyPropertyChanged
EN

Stack Overflow用户
提问于 2009-08-11 02:49:10
回答 4查看 1.8K关注 0票数 1

几个(新手)问题:

1)我看到了很多

代码语言:javascript
复制
public Person SelectedPerson { get; set; } 

我假设这不会引发财产变动?

因此,如果我想这样做,我必须提供以下内容?

代码语言:javascript
复制
    private Person selectedPerson;
    public Person SelectedPerson
    {
        get
        {
            return this.selectedPerson;
        }
        set
        {
            if ((this.selectedPerson != value))
            {
                this.selectedPerson = value;
                base.OnPropertyChanged("SelectedPerson");
                // Note: Using ViewModelBase

            }
        }
    }

2)如果我有以下情况:

代码语言:javascript
复制
    public bool CanDeletePerson
    {
        get
        {
            return SelectedPerson != null;
        }
    }

也出现在XAML中

代码语言:javascript
复制
< Button IsEnabled="{Binding CanDeletePerson}" 
Command="{Binding DeletePersonCommand}"> Delete </ Button >

如何让它重新评估CanDeletePerson属性?基本上是禁用的,但是当我单击网格并将行移动到行时,SelectedPerson正在被更新,但是CanDeletePerson没有得到更新的值,那么如何让它再次实际检查值呢?

3)我看到了

..。取决于是否有任何内容订阅了该事件。

你怎么订阅这个活动?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-11 02:57:17

  1. 对-那不开火
  2. 是的,要重新评估CanDeletePerson,可以在CanDeletePerson上提高PropertyChanged,如下所示 设置{ if ((this.selectedPerson != value)) { this.selectedPerson = value;base.OnPropertyChanged("SelectedPerson");base.OnPropertyChanged("CanDeletePerson");}
  3. 与任何正常事件一样,但是如果使用WPF,通常不需要显式订阅
票数 3
EN

Stack Overflow用户

发布于 2009-08-11 02:55:12

是的,“自动属性”不触发PropertyChanged事件。

您可以通过向CanDeletePerson设置器添加OnPropertyChanged("CanDeletePerson")来重新评估SelectedPerson

我不确定最后一点是否是问题,但您可以订阅PropertyChanged事件,就像其他事件一样。MyClass.PropertyChanged += MyClassPropertyChanged

MyClassPropertyChanged在哪里

代码语言:javascript
复制
private void MyClassPropertyChanged(object sender, PropertyChangedEventArgs args)
{
    args.PropertyName .... //<-- Name of property changed.
}

但你不应该这么做。WPF对它需要订阅的事件进行订阅。

票数 2
EN

Stack Overflow用户

发布于 2009-08-11 03:36:34

下面是是一篇介绍MVVM模式的好文章的链接。

具体来说,如果您查看RelayCommand类,它可以很好地实现ICommand对象,并允许您指定谓词来计算命令是否可以执行。

canExecute谓词在RelayCommand中的计算可以避免将单独的属性绑定到Button的IsEnabled属性。

我通常遵循实现私有属性的文章中的示例,该属性为canExecute谓词提供布尔值。

那篇文章对我开始学习模式有很好的帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1258262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档