如何在单击时使命令不禁用按钮

时间:2015-06-19 09:56:38

标签: c# wpf mvvm command relaycommand

我目前正在开发MVVM中的应用程序。 我正在使用所有按钮RelayCommand来执行操作。事实是,使用RelayCommand,单击该按钮时,该按钮将被禁用,即执行该命令的时间。 因为我们的渲染引擎有点沉重,所以当我们打开一个新窗口时,按钮会暂停一段时间,就像一秒钟一样。

我的问题是:是否有办法禁用此行为并启用该按钮,因为它会更改样式? 改变残疾人风格不是一种选择......

我没有在网上或文档中看到这种行为?

谢谢

编辑:

我的RelayCommand的两个不同实现

        AnswerCommand = new RelayCommand(p => AnswerMail(p), p => IsMailSelected());
        DeleteMailCommand = new RelayCommand(p => Task.Run(() => DeleteMail()), p => IsMailSelected());

1 个答案:

答案 0 :(得分:1)

我认为您应该同步ICommand实例Execute方法中存在的块的访问权限,并且每次到达时,都要启动一个新线程。如果你想多次点击那个按钮,那里有那个锁定部分,就会把你的呼叫放在一个队列中。如果你想拒绝接收到的请求,你可以实现balking模式。

https://en.wikipedia.org/wiki/Balking_pattern

这样,当创建的线程启动时,您的按钮将停止被禁用。

我不确定这种方法对你有帮助,但我认为这是一种可行的方案。

还有一件事,我刚刚发现了这个:

Patterns for Asynchronous MVVM Applications: Commands

我之前没有使用它,但看起来不错,今晚我会尝试一下。祝你好运!