我使用了MVVM Foundation的RelayCommand,现在,当我尝试使用“普通”ICommand时,我真的不知道如何使用它,特别是将它“绑定”到我的主类使用的变量上。我只想创建一个在主类视图模型中引发事件(RequestClose)的OkCommand。另外,我只想在所有绑定都有效的情况下启用它。验证是使用ValidationRule实现的,如下所示
<TextBox>
<TextBox.Text>
<Binding Path="Blue">
<Binding.ValidationRules>
<validators:ByteValidator />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>发布于 2010-11-08 06:35:45
ICommand是一个接口,所以它本质上是抽象的。你不能直接使用它--你需要一些实现它的东西。(例如RelayCommand)
WPF确实提供了一个内置的ICommand实现:RoutedCommand。(以及相关的派生类型RoutedUICommand。)然而,这些类型是为一个非常特定的场景而设计的,与您所描述的不匹配。(它们使用UI树的结构来确定将处理命令的内容。这通常只适用于由控件直接提供的某些常用命令的多个不同实现。例如,TextBox知道如何实现剪切、复制、粘贴等,而您希望有焦点的TextBox来处理命令。)
所以并没有真正的“普通”ICommand实现。而且,您可能不想使用验证规则...
验证规则非常有限,而且很难让它们支持您所描述的场景。它们有两个限制:
第二个问题会让你很难做你想做的事情。这就是为什么它们没有被广泛使用的原因,这可能也是为什么微软引入了一种更好的机制-对于大多数验证方案,您不使用ValidationRule,而是让您的数据源实现IDataErrorInfo。
原则是数据源对象决定它是否有效。然后您的数据源对象还可以修改任何命令的有效性。这就是在项无效时禁用OkCommand对象的方式。
而且,由于WPF没有提供适合此场景的简单的内置ICommand实现,这就是为什么人们觉得有必要编写像RelayCommand这样的东西。它是对这样一个事实的回应,即WPF实际上并没有内置的“正常”命令-它只有时髦的路由命令。
https://stackoverflow.com/questions/4113230
复制相似问题