2010-05-15 91 views
2

我正在使用MVVM構建WPF 4.0應用程序。該模型使用實體框架4.0生成。 我在WPF上使用數據綁定將用戶輸入綁定到模型屬性。使用MVVM和實體框架4.0驗證WPF用戶輸入

什麼是驗證用戶輸入的最簡單方法? 我更喜歡一種可以在模型上設置驗證規則而不是在WPF上的方法。如何才能做到這一點?任何樣品都表示讚賞。

回答

0

BookLibraryWPF Application Framework (WAF)項目的示例應用程序顯示了一個MVVM應用程序。它使用實體框架並在模型(實體)類上定義驗證規則。

0

我發現的最簡單的方法取自this book,第624-625頁。

視圖模型應該執行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; 
      } 
     } 

和View長版本:

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

應該圍繞創建一個漂亮的紅色邊框您的文本框在規則失敗時,您可以播放w的錯誤消息唉,你想要的,例如綁定錯誤消息的文本框工具提示(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}" 

乾杯!