我将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禁用/启用控件。
答案 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