2014-11-23 116 views
0

這是我的問題,當應用程序啓動時,用戶選擇文本框。不輸入任何用戶點擊標籤來選擇下一個文本框。這應該在viewmodel中爲第一個文本框綁定觸發setter方法。但似乎沒有發生。在TextBox失去焦點後調用Setter

在視圖模型:

private string _username; 
public string Username 
{ 
    get { return _username; } 
    set 
    { 
     _username = value; 
     RaisePropertyChanged("Username"); 
     Validator.Validate(() => Username); 
    } 
} 

而且在XAML:當我開始輸入一些東西,然後刪除它,移動焦點到別的東西

<TextBox Text="{Binding Username, Mode=TwoWay, ValidatesOnDataErrors=True}" /> 

用戶名setter方法被調用。 Datacontext已正確設置並正在運行。

1)用戶將焦點設置用戶名文本框,不鍵入任何

2)用戶將焦點移動到下一個項目上形式

結果=在視圖模型setter方法當用戶名文本框失去焦點不叫

結果,我需要= setter方法甚至被稱爲時如果目的是要立即觸發驗證狀態(這是我從獲取用戶不輸入任何

+1

「這應該觸發setter方法」 - 請詳細解釋爲什麼你相信這是真實的。如果'TextBox'的內容沒有改變,爲什麼要調用視圖模型的setter?如果你想知道控件什麼時候失去焦點,爲什麼不處理'LostFocus'事件呢?當數值沒有真正改變時,你爲什麼要做一個屬性更改的通知和數據驗證?我覺得這個問題很混亂。 – 2014-11-23 21:24:19

+0

當用戶沒有輸入任何東西到文本框,只是移動到下一個控制,然後我需要能夠顯示驗證錯誤。但如果setter沒有被調用,那麼我不能驗證該字段是否爲空。 – hs2d 2014-11-23 21:30:23

+0

看看Binding類 – Maxwe11 2014-11-23 21:32:43

回答

0

你「需要調用的二傳手yway「),那麼爲什麼不只是在Window級別使用Loaded事件並將其分配爲String.Empty,以便無論何時都會觸發驗證碼。

甚至更​​好,使用IDataErrorInfo其中getter呼叫從而意味着第一次TextBox負載,IDataErrorInfo接口將被調用,屬性驗證過程中進行驗證。