【问题标题】:WPF checkbox binding doesn't work after adding Bindinggroup NotifyOnValidationError添加 Bindinggroup NotifyOnValidationError 后 WPF 复选框绑定不起作用
【发布时间】:2015-07-24 13:04:16
【问题描述】:

我有一个使用 MVVM 的对话框实现,它可以很好地与绑定等配合使用。因此在 ViewModel 中检查复选框会更新。

但是,我现在已经使用 WPF Binding.ValidationRules 实现了验证,并在对话框上向我的 stackpanel 添加了一个 BindingGroup

<StackPanel.BindingGroup>
  <BindingGroup NotifyOnValidationError="True">
  </BindingGroup>
</StackPanel.BindingGroup>

所以我可以捕获所有验证错误。但是添加 BindingGroup 也意味着我对 ViewModel 的绑定不再适用于复选框。 任何人都知道为什么复选框突然不起作用,但我的文本框仍然起作用?

【问题讨论】:

    标签: wpf mvvm binding


    【解决方案1】:

    如果您要使用 MVVM 进行验证,请继续使用 INotifyDataErrorInfo。

    最佳实践是实现 INotifyDataErrorInfo 接口(如果您使用的是 .NET 4.5)或 IDataErrorInfo 接口。 Please refer to the blog post about data validation in WPF for more information and code samples:

    【讨论】:

    • 这是最佳做法还是常见做法?考虑到我见过的大多数实现者都在代码中使用了一个大的 switch case,那么不,谢谢。 Wpf 在 XAML 中确实支持它,因此是绑定组。
    • 请通过给定的链接。这是最佳实践。并支持 MVVM。
    • 抱歉,我将您的建议与旧的 IDataErrorInfo 混淆了,我在互联网上找到的示例主要由大型 switch 案例或 if 语句组成。如果我可以采用 .NET 4.5 方式,我发现您的建议非常有效并且是正确的方法。但我们仍处于 .NET 4.0..
    • 你好,如果你还在.Net 4.0,你可以考虑IDataErrorInfo,这里是链接msdn.microsoft.com/fr-fr/library/…你可以和这个链接stackoverflow.com/questions/19402840/…进行比较
    • 嗯,你得到了答案,我在查看上面的链接后恢复到这个解决方案。考虑到我在“public string this[string columnName]”方法中使用大 if else 或 switch case 看到的所有其他示例,这是一个非常好的实现示例
    【解决方案2】:

    您需要拨打CommitEditBindingGroup

    if (stackPanel1.BindingGroup.CommitEdit())
    {
        stackPanel1.BindingGroup.BeginEdit();
    }
    

    也许,在UserControl 的某处有一个Button,它在点击事件处理程序或CheckBoxChecked 事件处理程序中执行此操作?

    【讨论】:

    • 谢谢,我去看看。但我认为文本框绑定仍然有效。
    猜你喜欢
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多