2012-11-03 42 views
1

我有一個文本框,它是綁定到一個字符串Text屬性(在視圖模型)WPF如何過濾數據綁定的元素? MVVM相關

問:我如何使它所以無論是寫在文本框是完全10個字符長(或僅用英文字母表示,只是一個例子)。

問題是直接寫入viewModel的字符串變量。所以我唯一的想法是有一個這樣的轉換器。但即使轉換器沒有任何返回,我如何通知用戶有什麼問題? (「錯誤 - 長度= 10」爲例)

+0

它更有用的問題認爲是驗證而不是過濾。作爲本文答案之一,WPF提供了幾種支持形式,但IDataErrorInfo是MVVM的首選方法(請參閱Adi Lester的回答)。歡呼聲 – Berryl

回答

0
+0

雖然這可能會回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供鏈接供參考。 –

3

我推薦看看IDataErrorInfo interface使用。 你可以讓你的viewmodel實現這個接口來定義驗證邏輯。例如:

public class ViewModel : IDataErrorInfo 
{ 
    public string MyText { get; set; } 

    #region IDataErrorInfo Members 

    public string Error 
    { 
     get { return null; } 
    } 

    public string this[string columnName] 
    { 
     get 
     { 
      if (columnName == "MyText") 
      { 
       if (MyText.Length != 10) 
       { 
        return "Text should be exactly 10 letters."; 
       } 
      } 

      return null; 
     } 
    } 

    #endregion 
} 

一個很好的例子和進一步的定製可以找到here