我正在使用MVVM构建WPF 4.0应用程序。使用Entity Framework 4.0生成模型。 我在WPF上使用数据绑定将用户输入绑定到模型属性。
验证用户输入的最简单方法是什么? 我更喜欢一种方法,我可以在模型上设置验证规则,而不是在WPF本身上。如何才能做到这一点?任何样品都表示赞赏。
答案 0 :(得分:0)
WPF Application Framework (WAF)项目的 BookLibrary 示例应用程序显示了一个MVVM应用程序。它使用实体框架并在模型(实体)类上定义验证规则。
答案 1 :(得分:0)
我找到的最简单方法取自this book,第624-625页。
ViewModel应该实现IDataErrorInfo
private string _newItem;
public string NewItem
{
get { return _newItem; }
set
{
if (Equals(_newItem, value)) return;
_newItem = value;
SendPropertyChanged("NewItem");
}
}
public string this[string propertyName]
{
get
{
if (propertyName == "NewItem")
{
var valid = NewItem.All(Char.IsLetterOrDigit);
if (!valid)
return "NewItem can only contain letters and numbers.";
}
return null;
}
}
查看长版:
<TextBox>
<TextBox.Text>
<Binding UpdateSourceTrigger="PropertyChanged" Path="NewItem">
<Binding.ValidationRules>
<DataErrorValidationRule></DataErrorValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
或简短版本:
<TextBox Text="{Binding NewItem,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}"/>
当规则失败时,它应该在文本框周围创建一个漂亮的红色边框,并且您可以按照您想要的方式使用错误消息,例如将错误消息绑定到文本框工具提示(MSDN):
<Window.Resources>
<Style x:Key="TextBoxInError" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
然后将其添加到文本框中:
Style="{StaticResource TextBoxInError}"
干杯!