【发布时间】:2014-12-09 09:41:35
【问题描述】:
我有一个显示日期时间的时间部分的文本框:
<TextBox HorizontalAlignment="Left" Height="23" Margin="0,13,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Validation.Error="Validation_OnError">
<TextBox.Text>
<Binding Path="MyDate" StringFormat="HH:mm" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<c:TimeValidator></c:TimeValidator>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
是否可以对属性更改进行验证,并在失去焦点时进行转换?
我希望更改属性验证,但我希望在失去焦点时更新我的数据源。否则,转换器将在用户在 TextBox 中编辑时启动。如果值为10:50 并且用户删除了最后一个数字,则这可能是一个问题,因此该值变为10:5。然后转换器会将其转换为10:50。在失去焦点时可以这样做,但在属性改变时则不行。但是为了验证器,我想验证属性更改,因此只要输入的值无效,用户就有红色边框。
【问题讨论】:
-
您使用的绑定类型应该在失去控制焦点时有效地更新属性。您可以在正确设置属性的 MyData 属性设置器中编写转换代码。调用 PropertyChanged 后,您的控件应显示正确的结果。不是这样吗?
-
请注意绑定 MyDate 是一个 DateTime 结构。如果将 UpdateSourceTrigger 设置为 PropertyChanged(正如我在上一节中试图描述的那样),则使用 StringFormat 的标准转换效果不佳。但为了“实时验证”,我想在 PropertyChanged 上有触发器。但我想验证和源更新没有不同的触发器。
标签: c# wpf validation converter