我目前正在开发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/