[英]How to bind IsEnabled property to a more dynamic property in ViewModel?
我有一個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參數傳遞給委托命令,它將動態地工作。 對於這樣的情況有這樣的事情嗎? 謝謝!
您可以在類范圍內的代碼中的任何位置調用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);
}
}
如果將更復雜的條件添加到您的屬性中,這將更容易維護,並且可讀性更高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.