在视图模型中公开绑定验证结果
Expose binding validation result in view model
我在 WPF 中遵循了 Microsoft 关于 implementing binding validation 的简短教程,它运行良好。
但是,我需要在视图模型上公开验证结果,以便我的应用程序可以阻止用户继续前进,但我看不到实现此目的的方法。
下面是我的控件的 XAML,其中 StartDateRule
定义为继承自 ValidationRule
的 class
<controls:DateInputBox
Grid.Column="2"
Grid.Row="3"
Height="28"
HorizontalAlignment="Left"
Watermark=""
Width="110"
VerticalAlignment="Center">
<controls:DateInputBox.SelectedDate>
<Binding Path="SelectedDate">
<Binding.ValidationRules>
<local:StartDateRule/>
</Binding.ValidationRules>
</Binding>
</controls:DateInputBox.SelectedDate>
</controls:DateInputBox>
我试图在我的视图模型中创建 StartDateRule
class 的实例,并绑定到它。我的想法是我可以在视图模型上公开一些 Validate()
方法,该方法将调用规则上的 Validate()
方法。但我似乎无法创建此绑定。我不确定这是因为我没有正确的语法,还是因为这是不可能的。
我已经阅读了很多关于使用 INotifyDataErrorInfo
界面的资料,但这似乎有 很多 样板代码,我找不到很好的官方文档。
我想要实现的目标是否可行?
您不在视图模型中创建验证规则的实例。如果你有一个视图模型,你应该在那里实现你的应用程序逻辑,这也适用于验证逻辑。
这意味着您应该实现 INotifyDataErrorInfo
接口,而不是在视图中使用验证规则。请参阅 this blog post 了解有关 WPF 中数据验证的更多信息。
您将找到有关如何实现接口的示例 here and here。
我在 WPF 中遵循了 Microsoft 关于 implementing binding validation 的简短教程,它运行良好。
但是,我需要在视图模型上公开验证结果,以便我的应用程序可以阻止用户继续前进,但我看不到实现此目的的方法。
下面是我的控件的 XAML,其中 StartDateRule
定义为继承自 ValidationRule
<controls:DateInputBox
Grid.Column="2"
Grid.Row="3"
Height="28"
HorizontalAlignment="Left"
Watermark=""
Width="110"
VerticalAlignment="Center">
<controls:DateInputBox.SelectedDate>
<Binding Path="SelectedDate">
<Binding.ValidationRules>
<local:StartDateRule/>
</Binding.ValidationRules>
</Binding>
</controls:DateInputBox.SelectedDate>
</controls:DateInputBox>
我试图在我的视图模型中创建 StartDateRule
class 的实例,并绑定到它。我的想法是我可以在视图模型上公开一些 Validate()
方法,该方法将调用规则上的 Validate()
方法。但我似乎无法创建此绑定。我不确定这是因为我没有正确的语法,还是因为这是不可能的。
我已经阅读了很多关于使用 INotifyDataErrorInfo
界面的资料,但这似乎有 很多 样板代码,我找不到很好的官方文档。
我想要实现的目标是否可行?
您不在视图模型中创建验证规则的实例。如果你有一个视图模型,你应该在那里实现你的应用程序逻辑,这也适用于验证逻辑。
这意味着您应该实现 INotifyDataErrorInfo
接口,而不是在视图中使用验证规则。请参阅 this blog post 了解有关 WPF 中数据验证的更多信息。
您将找到有关如何实现接口的示例 here and here。