我有一个SL4用户控件。它包含一个DatePicker。该控件公开DateTime依赖项属性(不可为空,因为它是必填字段)。我将DatePicker的SelectedDate(可以为Nullable< DateTime>)绑定到{RelativeSource Self}的DateTime属性,作为双向。除非在DatePicker中输入空日期,否则此绑定有效。使用ValidatesOnExceptions设置绑定,因此DatePicker的边框变为红色,但在工具提示中显示“输入格式不正确”。但应该说这个领域是必需的。
我尝试了一个自定义的IValueConverter,它使用自定义文本抛出异常(ValidationException,FormatException,InvalidOperationException。等),但它们都没有被处理。
我知道我的控件可以实现INotifyDataErrorInfo,但问题是null值甚至没有进入我的控件,因为我的DateTime不可为空,因此无需验证。
我可以很容易地完成这件事而没有任何约束力。或者通过绑定到隐藏的Nullable< DateTime>我的控件中的属性,验证此属性不为null,并公开另一个DateTime属性。或者通过提供ValueConverter将null转换为DateTime.MinValue或其他东西。
但是这些方法看起来都是解决方法,我希望有更好的解决方案。处理这个问题的最佳方法是什么?
答案 0 :(得分:2)
提交给Connect,投票赞赏。 https://connect.microsoft.com/VisualStudio/feedback/details/661318/the-binding-engine-doesnt-handle-exceptions-from-a-converter
答案 1 :(得分:1)
即使null不是有效值,您基本上也必须使您将DatePicker绑定到可为空的DateTime的值。
然后你只需要依赖你的验证逻辑来确保你的应用程序永远不允许在值为空时处理/存储/无论如何。