我正在尝试使用MVVM为WPF应用程序中的电话号码字段设置验证。我有文本框文本绑定但似乎无法弄清楚拒绝输入和弹出工具提示所涉及的逻辑。任何建议将不胜感激。
[Required]
public string PhoneNumber
{
get
{
return EntityPhone.PhoneNumber;
}
set
{
int intValue = 0;
if(!int.TryParse(value, out intValue))
{
// ToolTip tt = new ToolTip();
// tt.Content = "Invalid Character. Please enter a valid 10-digit number";
}
EntityPhone.PhoneNumber = value;
NotifyOfPropertyChange(() => PhoneNumber);
}
}
答案 0 :(得分:1)
首先,您需要让您的类继承IDataErrorInfo
,WPF将其用于验证目的。
public class MyClass : IDataErrorInfo
{
...
#region IDataErrorInfo Members
string IDataErrorInfo.Error
{
get { return null; }
}
string IDataErrorInfo.this[string columnName]
{
get
{
if (columnName == "PhoneNumber")
{
// Validate property and return a string if there is an error
return "Some error";
}
// If there's no error, null gets returned
return null;
}
}
#endregion
}
接下来,告诉您绑定它应该在更改时验证值
<TextBox Text="{Binding Path=PhoneNumber, ValidatesOnDataErrors=True}" ... />
最后,创建一个验证模板。这是我经常使用的样式/模板
<!-- ValidatingControl Style -->
<Style TargetType="{x:Type FrameworkElement}" x:Key="ValidatingControl">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding
Path=(Validation.Errors)[0].ErrorContent,
RelativeSource={x:Static RelativeSource.Self}}" />
</Trigger>
</Style.Triggers>
</Style>