我有一個簡單的WPF頁面,有幾個RadioButtons,每個RadioButton都註冊了一個Checked
事件處理程序,這樣當選擇被改變時會發生一些事情。默認情況下,我想要選擇其中一個RadioButton,因此我已將IsChecked
屬性設置爲xaml中的True
。事情是這樣的:如何避免在InitializeComponent期間觸發事件?
<RadioButton Checked="Radio_Checked" IsChecked="True">One</RadioButton>
<RadioButton Checked="Radio_Checked">Two</RadioButton>
這樣做的問題是,在InitializeComponent
的IsChecked
屬性將導致事件觸發,這會導致空引用異常,因爲我的事件處理程序試圖使用尚未初始化的元素。
private void Radio_Checked(object sender, RoutedEventArgs e)
{
if (this.IsInitialized)
{
if(MyRadioButton.IsChecked.GetValueOrDefault())
{
//SomeOtherElement is not initialized yet so it is null
SomeOtherElement.Visibility = Visibility.Visible;
}
}
}
我想避免在我所有的事件處理程序使用if (this.IsInitialized)
,因爲這是我:
目前我已經解決這個問題通過檢查頁面IsInitialized
我的處理程序中,如下所示得到從未在WinForms中做過。
所以我的問題是,我可以處理這個不同的方式,而不必添加額外的代碼給我所有的事件處理者?
你應該看一看,它可以與WPF MVVM模式,可以解決很多這些問題。 – nvoigt
@nvoigt:是的,我有一本WPF的書,我真的需要閱讀。我相信它包含了相當多的關於MVVM模式 – musefan
您可能想看到此鏈接: http://stackoverflow.com/questions/2518231/wpf-getting-control-null-reference-during-initializecomponent –