【问题标题】:Expose binding validation result in view model在视图模型中公开绑定验证结果
【发布时间】:2022-01-13 14:56:23
【问题描述】:

我在 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 类的实例,并绑定到它。我的想法是我可以在视图模型上公开一些 Validate() 方法,该方法将在规则上调用 Validate() 方法。但我似乎无法创建此绑定。我不确定这是因为我的语法不正确,还是因为不可能。

我已经阅读了很多关于使用INotifyDataErrorInfo 接口的资料,但这似乎有很多 样板代码,我找不到关于此的好的官方文档。

我正在努力实现的目标可能吗?

【问题讨论】:

  • 验证规则发生在视图中。输入不会传输到视图模型。您必须捕获视图中的冒泡错误并将某些内容传递给 viewmodel。或者在视图模型中验证

标签: c# wpf validation data-binding binding


【解决方案1】:

您不会在视图模型中创建验证规则的实例。如果你有一个视图模型,你应该在那里实现你的应用程序逻辑,这也适用于验证逻辑。

这意味着您应该实现INotifyDataErrorInfo 接口,而不是在视图中使用验证规则。有关 WPF 中的数据验证的更多信息,请参阅this blog post

您将找到一个如何实现接口herehere 的示例。

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多