单击按钮时禁用多个GUI控件

时间:2016-08-09 06:15:20

标签: wpf

我将DelegateCommands绑定到UI中的按钮。 我不是在使用棱镜。 现在,我想在单击按钮时禁用/隐藏UI上的某些控件。

我是否必须将Disable / Hide逻辑放入DelegateCommand本身的执行处理程序中? 这里特别关注:后台工作者线程。

  this.MyCommand = new DelegateCommand(MyExecutehandler);

    void MyExecutehandler(object obj){
    // 1.) disable controls here
    // 2.) long running operation on background worker here
    // 3.) enable the controls again in the worker_completed handler?
    }

然后通过MVVM禁用/启用控件。

2 个答案:

答案 0 :(得分:1)

  

此处特别关注:后台工作线程

所以我假设您正在询问如何从另一个线程修改UI控件状态。

通常我们使用以下方式从工作线程

修改UI线程的控制
this.Dispatcher.BeginInvoke( <your delegate here>)

但我怀疑你不能在后台工作者线程中这样做,因为'this'将大部分不同。所以你可以试试这个:

button.Dispatcher.BeginInvoke(new Action(()=>
{
 //disable button here
}));

就像工作线程发送消息来告诉UI线程运行委托。

还有一件事,通常我们在某个进程之后禁用了一个控件并重新启用了一个按钮,以避免一些不必要的附加事件/ propertychanged事件。所以我怀疑你可能需要这个:

您可以通过暂时删除事件来完成此操作:

 button -= button_click_event 

并在此之后重新添加事件

 button += button_click_event

希望这有帮助。

答案 1 :(得分:0)

您可以将要禁用的控件的可见性属性和MyExecutehandler函数集属性值绑定到visibility.collapse