簡體   English   中英

如何將IsEnabled屬性綁定到ViewModel中的更多動態屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM