假设我正在实现一个 Winforms UI,其中所有命令都遵循以下模式:
interface ICommand
{
bool CanExecute { get; }
void Execute();
}
触发此类命令的按钮或菜单项应具有以下设置:
- 属性
Enabled
绑定到命令的CanExecute
- 事件
Click
链接到命令的Execute
(由于方法签名不同,通过中间事件处理程序)
麻烦的CanExecute
是,INotifyPropertyChanged
在这里实现它不会起作用,因为这个属性不能直接修改,而是取决于程序中的其他因素,不需要与命令相关。并且不必PropertyChanged
在程序的完全不相关的部分中触发命令事件。
您如何让数据绑定管理器知道何时CanExecute
更改?
这是我的问题的一个(纯属虚构)示例:
bool CanExecute
{
get
{
return User.LoggedInForAtLeastNMinutes(5);
// how would you trigger data-binding updates for CanExecute?
}
}
理想情况下,我希望 UI 不断检查CanExecute
(好像它是一个易失性字段),但 AFAIK 这不是 Winforms 数据绑定的工作方式。有没有人有这个问题的解决方案?
注意:我知道 WPF,顺便说一句。我的问题的背景是,我将在 WPF 的大方向上逐步改进现有的 Winforms 应用程序。但实际上使用 WPF 并因此摆脱我所问的问题现在是不可行的。