如何暂时禁用 WPF 解决方案中的事件?

问题描述 投票:0回答:1

我正在开发基于 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();
}

提前致谢

c# wpf xaml events loaddata
1个回答
1
投票

我的典型方法是使用标志:

if(!isDoingSomething){
    isDoingSomething = true;
    DoSomething();
    isDoingSomething = false;
}

如果存在

DoSomething
抛出异常的风险,您可能需要使用 try/finally。

© www.soinside.com 2019 - 2024. All rights reserved.