【发布时间】:2011-03-23 19:53:01
【问题描述】:
假设我正在实现一个 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 并因此摆脱我所询问的问题目前是不可行的。
【问题讨论】:
标签: winforms data-binding inotifypropertychanged volatile command-pattern