gpt4 book ai didi

c# - 如何避免在 InitializeComponent 期间触发事件?

转载 作者:行者123 更新时间:2023-11-30 15:32:05 26 4
gpt4 key购买 nike

我有一个简单的WPF页面,上面有几个radiobuttons,每个RadioButton均以检查事件处理程序注册,以便在更改选择时发生某些事情。默认情况下,我希望选择这些 RadioButtons 之一,因此我在 xaml 中将 IsChecked 属性设置为 True。像这样:

<RadioButton Checked="Radio_Checked" IsChecked="True">One</RadioButton>
<RadioButton Checked="Radio_Checked">Two</RadioButton>

问题在于,在 InitializeComponent 期间,IsChecked 属性会触发事件,这会导致空引用异常,因为我的事件处理程序尝试使用具有尚未初始化。

目前,我已经通过检查我的处理程序中的页面 IsInitialized 来解决这个问题,如下所示:

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),因为这是我在 WinForms 中从来不需要做的事情。

所以我的问题是,我可以用不同的方式处理这个问题,而不必向我所有的事件处理程序添加额外的代码吗?

最佳答案

老实说,我很惊讶你没有在你的处理程序中检查 null ......检查 IsInitialised 只是检查的一个细微变化对于 null。处理 null 值只是良好编程的一部分,让我们面对现实吧,它并没有真正添加很多代码。

所以为了回答你的问题,我会说'不,如果你不这样做,就没有办法在你的事件处理程序中检查 null(或 IsInitialised)希望发生 NulReferenceException'。

但是,在使用 MVVM 方法时,我们不会使用很多事件,而是尽可能使用数据绑定(bind)和 ICommand 实例。当我们确实需要使用事件时,我们通常在 Attached Properties 中使用它们,但您仍然需要检查 null 值。

关于c# - 如何避免在 InitializeComponent 期间触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19656320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com