【问题标题】:wpf idataerrorinfo comboboxwpf idataerrorinfo 组合框
【发布时间】:2011-07-30 14:00:52
【问题描述】:

我有一个简单的视图和视图模型,后者实现了 IDdataErrorInfo 和 IValidationExceptionHandler。该视图包含一个组合框,其 ItemsSource 绑定到一个集合, SelectedValue 绑定到一个属性 - 验证数据错误和异常;属性更新已更改,并通知源已更新。

我正在使用数据注释,并且该属性被“装饰”了Required以及 Range 属性,我会在执行视图时期望组合框显示错误装饰器和我为Required提供的消息属性。但是,将鼠标悬停在装饰器上时,我注意到消息是“无法转换值”。

如果我发现没有选择任何值,我是否必须在属性的 getter 中检查选定的值并返回带有我的消息的 ValidationResult?我认为只使用Required 属性就可以解决问题,但这似乎不适用于组合框?

非常感谢任何帮助。

【问题讨论】:

    标签: wpf combobox data-annotations idataerrorinfo required


    【解决方案1】:

    如果组合框中没有代表 SelectedValue 代表的类型的默认值的项目,通常会发生这种情况。

    假设您绑定的选定值属性是字符串,那么应该有一个项目(在 ItemsSource 中)表示 string.empty 的默认值。

    因此(可能)错误是“无法转换值”

    如果这有帮助,请告诉我。

    【讨论】:

    • 感谢您的回复,非常感谢。ItemsSource 绑定到一个列表,其中对象有两个属性,一个 id(长)和一个文本(字符串)。 id 是 SelectedValuePath,DisplayMemberPath 是文本。不确定我知道该怎么做?
    • 是的,所以 SelectedValue 绑定中有一个 null 或 string.empty。让我们尝试一下,让你的 ID 为“长”? (可为空)并在您的列表中有一些对象,其数据类似于 { Id = null, Text = "-- Please Select --" }。确保您只返回零的验证错误或 ID 的空值。删除任何其他用零左右屏蔽空值的防御性代码。请检查并告诉我...
    • 谢谢。听起来这可行,但当 db 支持是一个不可为空的字段时,显然需要做一些工作。我希望有比在列表中添加一个虚拟条目等更少的干扰。如果你能想到一种方法,那将是很棒的,但现在我会接受你的回答。谢谢
    • 很高兴我能帮上忙。遗憾的是,Required 属性比非空值类型更适用于可空值。
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多