我有一个TabItem
,其IsEnabled
属性绑定到名为IsSaved
的ViewModel属性。
看起来像这样:
<TabItem Header="POs"
IsEnabled="{Binding IsSaved, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
漂亮吧?在我的ViewModel
中,属性IsSaved
并不那么简单。它被定义为:
public bool IsSaved
{
get
{
return IsDeveloper
&& CheckValidation(null)
&& !IsDirty
&& !displayMasterRepository.IsObjectChanged(); //TODO: this does not work.
}
}
现在显然这永远不会更新View,因为此处发生了OnPropertyChanged
事件。事实上,如果我知道将OnPropertyChanged
放在哪里,但在这种情况下,许多事情可以触发更改此属性,因此没有意义。在这种情况下,有人会怎么做?
如果这是一个带有命令绑定的按钮,例如,我会将IsSaved
作为CanExecute参数传递给委托命令,它会动态工作。对于像这样的情况,有类似的东西吗?谢谢!
答案 0 :(得分:4)
您可以从类的范围内的代码中的任何位置调用OnPropertyChanged。
OnPropertyChanged("IsSaved");
此外,我喜欢为其他类公开一个公共函数来引发我的属性更改,例如:
public void RefreshIsSaved()
{
OnPropertyChanged("IsSaved");
}
或者一些不太具体的东西,如:
public void RaisePropertyChanged(string propertyName)
{
OnPropertyChanged(propertyName);
}
这是你要的吗?
作为旁注,您还可以更清楚地写下该财产:
public bool IsSaved
{
get
{
if(IsDirty || displayMasterRepository.IsObjectChanged())
return false;
return IsDeveloper && CheckValidation(null);
}
}
如果将更复杂的条件添加到您的属性中,这将更容易维护,并且它更具可读性。