即使我将按钮与从ICommand
派生的类相关联,我仍然需要弄清楚按钮应该如何触发CanExecute
方法并刷新其启用状态。我确实知道CanExecuteChanged
事件,一个带有相关命令的按钮会为其注册,但请参阅以下段落了解为什么这很麻烦。
在一个由大约10-15个控件组成的普通旧对话框中,似乎随意地必须处理这些控件中每一个控件的每个更改通知,从而触发按钮命令上的CanExecuteChanged
事件,导致按钮的启用状态受到CanExecute
方法返回值的影响。即使在最后一句话中说明需要做什么也相当麻烦。
必须有一种更好的方式来编码WPF对话框,以便确认按钮(例如,OK)变灰,直到所有控件都有有效信息并在该时间点启用(即,当所有控件都正确填写时)。示例代码、想法和文章指针将不胜感激。
感谢
我在这里没有看到任何偶然的东西。由于您的条件是"所有控件都具有有效信息",因此在编辑任何控件后都可能发生这种情况,因此您需要侦听来自所有控件的更改通知。
在一个由大约10-15个控件组成的简单的旧对话框上随意处理每一个变更通知这些控件中的一个,
我不这么认为。每个Textbox、checkbox更改事件都由同一个处理程序处理,比如SetState()
,它计算对话框的整体状态。每次编辑控件时,都会重新计算整个状态。
直到所有控件都具有有效信息
那么,该对象将具有布尔属性EnableOKButton
,比如说,它是根据更新的状态设置的。然后,该属性被绑定到按钮的Enabled
属性,因此它会自动更改,而不会处理无关事件。