我正在开发基于 XAML 窗口的 C# WPF 解决方案。
在其中一个窗口上,我添加了一个
DatePicker
,我希望在两个时刻完成一些操作:
DatePicker
中的日期更改时。这可以很容易地完成:
public void LoadData()
{
date_DatePicker.SelectedDate = DateTime.Today;
Do_Something();
}
private void DatePicker_DateChanged(object sender, SelectionChangedEventArgs e)
{
if (date_DatePicker.SelectedDate.HasValue)
{
Do_Something();
}
}
...但是你看到了问题:由于窗口的加载导致了一个日期,被填写在
DatePicker
中,这会启动Do_Something()
,导致此方法被启动两次。
我想通过检查
e.OriginalSource
来禁用此功能,但显然日期也已经填写在那里(我希望(DatePicker)(e.OriginalSource).SelectedDate
是null
)。
有没有办法这样说:
public void LoadData()
{
disable_Events();
date_DatePicker.SelectedDate = DateTime.Today;
re-enable_Events();
Do_Something();
}
提前致谢
我的典型方法是使用标志:
if(!isDoingSomething){
isDoingSomething = true;
DoSomething();
isDoingSomething = false;
}
如果存在
DoSomething
抛出异常的风险,您可能需要使用 try/finally。