禁用按钮,直到加载WPF表单

时间:2011-11-17 10:39:34

标签: wpf events

我有一个带有“下一个”和“上一个”按钮的WPF表单,用于导航到自定义日历的下一个月和前几个月。我想在用户点击它们时立即禁用这些按钮,并在加载mext / prev月份数据时启用它们。这样可以防止用户反复点击按钮,排队等事件逐一慢慢点击。

到目前为止,我已尝试将日历数据加载内容放入Dispatcher线程中,并维护一个标志以指示页面是否繁忙。似乎不起作用,事件仍在堆积。

我还尝试使用命令进行按钮单击,让执行处理程序加载数据,CanExecute根据IsBusy标志决定是否可以加载数据。也不起作用。

任何指针?

3 个答案:

答案 0 :(得分:0)

我想你在加载月份时会触发一个事件。 对我来说,最好的解决方案是手动禁用其点击事件上的按钮,并在月份加载时启用它们。 如果需要,我认为在视图中添加一些代码没有问题。

答案 1 :(得分:0)

您使用的是什么类型的命令?

当其中一个属性发生更改时,RelayCommand会重新运行CanExecute方法,但DelegateCommand则不会。

当CanExecute参数发生变化时,您需要在DelegateCommand上手动引发CanExecuteChanged事件。

void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "IsBusy")
    {
        // Might need a Cast here if your command is of type ICommand
        LoadDataCommand.RaiseCanExecuteChanged();
    }
}

答案 2 :(得分:0)

我通过使用BackgroundWorker加载视图并在next / prev事件处理程序中检查BackgroundWorker.IsBusy来修复此问题。