在视图模型中公开绑定验证结果

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