如何停止 UI层执行转换验证,或者至少让它继续?如果我有一个绑定到DateTime的文本框:
// view
<TextBox x:Name="StartTimeTextBox">
<TextBox.Text>
<Binding Path="StartTime"
StringFormat="t"
NotifyOnValidationError="True"
ValidatesOnDataErrors="True"
ValidatesOnExceptions="True" >
<Binding.ValidationRules>
<va:AlwaysSucceedsValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
// view model
[MyValidationAttribute]
public DateTime StartTime {get; set;}
当用户选择文本框中的所有文本文本并删除它(或键入&#34; asdf&#34;)时,转换失败,它会出现红色边框并且验证停止 。我尝试过使用ValidatesOn ...属性(我认为可以让我的&#34; MyValidationAttribute
&#34;执行)但没有成功。我还尝试添加一个ValidationRule,无论Text
是什么,它总是返回true - 但没有任何效果。
答案 0 :(得分:1)
如果您将TextBox.Text
绑定到DateTime
,并且用户输入了"my hovercraft is full of little lambs"
,那么Binding
可能分配给您的viewmodel属性以供您验证?它无能为力。
您可以将Validation.ErrorTemplate
的{{1}}设置为空模板,这样就可以摆脱红色大纲业务,但您仍然无法在viewmodel属性中获得任何可验证的内容。
如果要将用户的字符串输入验证为有效或无效的日期,则必须在您手中输入原始字符串的某个位置执行此操作。
如果要在viewmodel中执行此操作,则意味着为viewmodel提供TextBox
的 string 属性,并将其绑定到StartTime
。称之为TextBox
;在其setter中,如果字符串有效,则设置StringStartTime
;如果无效,它会单独留下DateTime StartTime
但设置一些错误属性,或抛出异常,或者其他什么。