我正在寫一個WPF應用程序,我想使用一個枚舉的狀態變量。枚舉更改事件
示例:程序啓動時,某些控件被禁用,直到狀態改變。
當狀態改變時,我想通過事件處理程序禁用/啓用各種控件。過去我寫了大量的自定義事件處理程序,但是,使用枚舉作爲觸發器已經讓我大開眼界。
有什麼建議嗎?
我正在寫一個WPF應用程序,我想使用一個枚舉的狀態變量。枚舉更改事件
示例:程序啓動時,某些控件被禁用,直到狀態改變。
當狀態改變時,我想通過事件處理程序禁用/啓用各種控件。過去我寫了大量的自定義事件處理程序,但是,使用枚舉作爲觸發器已經讓我大開眼界。
有什麼建議嗎?
如果您使用的是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}"/>
您應該在視圖模型中實現INotifyPropertyChanged
,並在值更改時調用該事件。
我希望有抽象的東西出來那麼遠。這是一個相對簡單的實現。如果沒有建議其他選項,那麼我將= D – Ritz 2012-04-25 01:18:01
基於應用程序的複雜性,我認爲我將簡單地編寫幾個方法來切換控件。遠非優雅,但不值得MVVM或類似設計模式的抽象級別。謝謝! – Ritz 2012-04-25 02:51:52
@Ritz注意「我的應用程序對MVVM來說太簡單了」陷阱!隨着規範的變化,應用程序的複雜程度往往會變得越來越複雜,而且越快越好,MVVM就越好。即使是最基本的應用程序,對於基本的MVVM implimentation也沒有真正的開銷,它簡化了應用程序的整體結構,並使您能夠繼續前進。 – Ricibob 2012-04-25 10:01:21
+1。我發現XAML幾乎要求它。 – 2012-04-25 12:07:53