2012-04-25 111 views
1

我正在寫一個WPF應用程序,我想使用一個枚舉的狀態變量。枚舉更改事件

示例:程序啓動時,某些控件被禁用,直到狀態改變。

當狀態改變時,我想通過事件處理程序禁用/啓用各種控件。過去我寫了大量的自定義事件處理程序,但是,使用枚舉作爲觸發器已經讓我大開眼界。

有什麼建議嗎?

回答

2

如果您使用的是MVVM方法,那麼我同意Daniel White的說法,您需要實現INotifyPropertyChanged。您應該將控件上的IsEnabled成員綁定到ViewModel上的屬性。

代碼:

public class ViewModel : INotifyPropertyChanged 
{ 
     public MyEnum EnumValue 
     { 
      get { return enumValue; } 
      set { 
       enumValue = value; 
       AreControlsEnabled = enumValue == MyEnum.SomeValue; 
      } 
     } 

     public bool AreControlsEnabled 
     { 
      get { return areControlsEnabled; } 
      set { 
       areControlsEnabled = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArg("AreControlsEnabled"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
} 

XAML:

<TextBox IsEnabled="{Binding AreControlsEnabled}"/> 
+0

基於應用程序的複雜性,我認爲我將簡單地編寫幾個方法來切換控件。遠非優雅,但不值得MVVM或類似設計模式的抽象級別。謝謝! – Ritz 2012-04-25 02:51:52

+2

@Ritz注意「我的應用程序對MVVM來說太簡單了」陷阱!隨着規範的變化,應用程序的複雜程度往往會變得越來越複雜,而且越快越好,MVVM就越好。即使是最基本的應用程序,對於基本的MVVM implimentation也沒有真正的開銷,它簡化了應用程序的整體結構,並使您能夠繼續前進。 – Ricibob 2012-04-25 10:01:21

+0

+1。我發現XAML幾乎要求它。 – 2012-04-25 12:07:53

3

您應該在視圖模型中實現INotifyPropertyChanged,並在值更改時調用該事件。

+0

我希望有抽象的東西出來那麼遠。這是一個相對簡單的實現。如果沒有建議其他選項,那麼我將= D – Ritz 2012-04-25 01:18:01