几个(新手)问题:

1)我看到很多

public Person SelectedPerson { get; set; } 

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

那么,如果我想这样做,我必须提供以下内容吗?

    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)如果我有以下情况:

    public bool CanDeletePerson
    {
        get
        {
            return SelectedPerson != null;
        }
    }

以及 XAML 中

< Button IsEnabled="{Binding CanDeletePerson}" 
Command="{Binding DeletePersonCommand}"> Delete </ Button >

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

3)我明白了

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

您如何订阅该活动?

有帮助吗?

解决方案

  1. 正确 - 不会触发
  2. 是的,要有 CanDeletePerson 重新评估后,您可以在以下日期提出 PropertyChanged CanDeletePerson, ,像这样

        set
        { 
            if ((this.selectedPerson != value))
            { 
                this.selectedPerson = value; 
                base.OnPropertyChanged("SelectedPerson"); 
                base.OnPropertyChanged("CanDeletePerson");
            }
        }
    
  3. 与任何普通事件一样,但如果您使用 WPF,通常不需要显式订阅

其他提示

是的,自动属性不火的PropertyChanged事件。

您可以得到CanDeletePerson通过添加OnPropertyChanged("CanDeletePerson")SelectedPerson制定者重新评估。

我不知道,如果你的最后一位是一个问题,但你可以订阅PropertyChanged事件像任何其他事件。 MyClass.PropertyChanged += MyClassPropertyChanged

其中MyClassPropertyChanged是

private void MyClassPropertyChanged(object sender, PropertyChangedEventArgs args)
{
    args.PropertyName .... //<-- Name of property changed.
}

但你不应该需要。 WPF确实订阅到它所需要的事件。

这里的一个链接到一个良好的制品引入MVVM模式

特别是,如果你看一下RelayCommand类,它实现一个ICommand对象,并允许你指定一个谓词来评估命令是否可以执行的很好的工作。

canExecute谓词在RelayCommand评价从一个单独的属性结合到按钮的IsEnabled属性可以节省。

我通常遵循的示例实施这对于canExecute谓词提供布尔值的私有财产的文章。

这文章给了我一个很好的帮助开始使用的模式。

如果您使用PropertyChanged事件,你的类必须实现INotifyProperyChanged接口,并在必要时引发事件。 在WPF中,对于数据绑定默认是DependencyProperty的,所以如果你有PropertyChanged事件的工作,你必须做一些事情到XAML(假设你的类人都在那里你提高PropertyChanged事件Name属性):

<TextBlock Text={Binding Path=Name, UpdateSourceTrigger=PropertyChanged} />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top