2010-01-18 55 views
1

我一直在使用WPF和MVVM模式一段時間。我很難驗證以「正常」方式工作:WPF中的表單驗證

1)我在我的ViewModel中實現了IDataErrorInfo接口。在XAML看起來像:

<TextBox Grid.Column="1" 
     Grid.Row="1" 
     Text="{Binding Path=ProjectKey, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" /> 

這裏的問題是,引發LostFocus和觸發器的PropertyChanged是否使用,將文本框的用戶不斷選項卡來對照驗證之前。這意味着如果我正在驗證空字段,用戶首次打開表單時將看到大量紅色。理想情況下,只有在第一次「丟失焦點」或「屬性更改」後,或者點擊「提交」按鈕後,輸入纔會被驗證。

2)另一個問題是當用戶點擊「提交」時最後驗證。在提交到數據庫之前,您需要驗證某些內容,例如重複數據。我知道我可以使用UpdateSourceTrigger = Explicit並在所有控件上調用UpdateSource方法。我想知道在MVVM模式中是否有合適的方法來做到這一點。它看起來像這樣的代碼不應該在視圖模型,因爲它是非常查看特定...

任何想法都會很棒。我搜索了很多網上,但似乎無法找到合適的解決方案...

+0

http://stackoverflow.com/questions/2821998/how-can-i-get-wpf-to-not-display-validation-errors-upon-initial-display-of-contro/2829884#2829884 could solve這兩個問題 – nash 2011-08-09 18:52:27

回答

0

對於一個您的視圖模型屬性應該有值在構造

public double Property1 {get; set;} 

    public ViewModel() 
{ 
    Property1 = 0; 
} 

初始化前手數對於第二個,在所有字段通過驗證之前,不應啓用提交按鈕。如果數據庫中有一個唯一的字段,那麼在屬性更改和顯示時驗證它,如果不通過,則顯示錯誤。您可以擁有綁定到按鈕的IsEnabled屬性的布爾屬性,並在所有字段都通過驗證後將其設置爲true。

+0

我跟隨這個例子從喬什史密斯:http://joshsmithonwpf.wordpress.com/2008/11/14/using-a-viewmodel-to-provide-meaningful-validation-error-messages/ – 2011-08-16 16:38:10