代码之家  ›  专栏  ›  技术社区  ›  Emad Gabriel

使用MVVM和entityframework4.0验证WPF用户输入

  •  2
  • Emad Gabriel  · 技术社区  · 16 年前

    我在WPF上使用数据绑定将用户输入绑定到模型属性。

    验证用户输入的最简单方法是什么?

    2 回复  |  直到 16 年前
        1
  •  0
  •   jbe    16 年前

    书库 应用程序示例 WPF Application Framework (WAF)

        2
  •  1
  •   LazyZebra    13 年前

    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}"
    

    干杯!