c# - 单击时如何使命令不禁用按钮

标签 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());

最佳答案

我认为您应该同步ICommand实例Execute方法中存在的块的访问,并且每次到达那里时,都要启动一个新线程。如果您想多次单击该按钮,并在该按钮上有该锁定部分,则会将您的调用排入队列。如果您想拒绝仍在运行的请求,则可以实现禁止模式。

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

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

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

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

Patterns for Asynchronous MVVM Applications: Commands

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

关于c# - 单击时如何使命令不禁用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30935224/

相关文章:

c# - 在 WPF 中的行的开头和结尾放置一个形状

wpf - 如何使用 DataTrigger 启动 Storyboard ?

ios - 如何将我的 UIButton 标题绑定(bind)到我的 ViewModel

c# - if else 语句和 while 循环

c# - Entity Framework 不适用于时态表

c# - 如何检查列表中具有唯一组合的多个属性,其中属性名称可作为单独的集合使用。 [C#]

c# - Bot Framework 缺少来自 Facebook channel 的 From.Id 和 Conversation.Id

c# - 两个数据网格具有相同的来源,但输出的结果略有不同

c# - 将依赖属性 (View) 与属性 (ViewModel) 同步

wpf - 如何使用转换将 WPF 单选按钮选择绑定(bind)到 Viewmodel?