几个(新手)问题:
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)我看到了
..。取决于是否有任何内容订阅了该事件。
你怎么订阅这个活动?
发布于 2009-08-11 02:57:17
CanDeletePerson,可以在CanDeletePerson上提高PropertyChanged,如下所示
设置{ if ((this.selectedPerson != value)) { this.selectedPerson = value;base.OnPropertyChanged("SelectedPerson");base.OnPropertyChanged("CanDeletePerson");}发布于 2009-08-11 02:55:12
是的,“自动属性”不触发PropertyChanged事件。
您可以通过向CanDeletePerson设置器添加OnPropertyChanged("CanDeletePerson")来重新评估SelectedPerson。
我不确定最后一点是否是问题,但您可以订阅PropertyChanged事件,就像其他事件一样。MyClass.PropertyChanged += MyClassPropertyChanged
MyClassPropertyChanged在哪里
private void MyClassPropertyChanged(object sender, PropertyChangedEventArgs args)
{
args.PropertyName .... //<-- Name of property changed.
}但你不应该这么做。WPF对它需要订阅的事件进行订阅。
发布于 2009-08-11 03:36:34
下面是是一篇介绍MVVM模式的好文章的链接。
具体来说,如果您查看RelayCommand类,它可以很好地实现ICommand对象,并允许您指定谓词来计算命令是否可以执行。
canExecute谓词在RelayCommand中的计算可以避免将单独的属性绑定到Button的IsEnabled属性。
我通常遵循实现私有属性的文章中的示例,该属性为canExecute谓词提供布尔值。
那篇文章对我开始学习模式有很好的帮助。
https://stackoverflow.com/questions/1258262
复制相似问题