使用MVVM和Entity Framework 4.0验证WPF用户输入

3
我正在使用MVVM构建一个基于WPF 4.0的应用程序。模型是使用Entity Framework 4.0生成的。 我在WPF上使用数据绑定将用户输入绑定到模型属性。
最简单的验证用户输入的方法是什么? 我更喜欢一种可以在模型上设置验证规则而不是在WPF本身上设置的方法。如何实现?任何样例都会很有帮助。
2个回答

1
我发现最简单的方法来自于这本书,第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}"

干杯!


0

BookLibrary示例应用程序是WPF应用程序框架(WAF)项目的一部分,展示了一个MVVM应用程序。它使用实体框架,并在模型(实体)类上定义验证规则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接