2012-08-17 37 views
0

我有一個類,我想在文本框中顯示List<string> Tags。爲此,我使用了一個IValueConverter。使用IDataErrorInfo和IValueConverter進行錯誤驗證

ListToStringConverter:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var list = value as List<string>; 
    var returnvalue = string.Empty; 

    if(list != null) 
     list.ForEach(item => returnvalue += item + ", "); 
    return returnvalue; 
} 

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var strValue = value as string; 

    if(strValue != null) 
     return strValue.Split(new char[] { ',' }); 

    return null; 
} 

類檢驗:

public class Test : IDataErrorInfo 
{ 
    public Test() 
    { 
     Tags = new List<string>(); 
    } 

    public List<string> Tags { get; set; } 

    string errors; 
    const string errorsText = "Error in Test class."; 
    public string Error 
    { 
     get { return errors; } 
    } 

    public string this[string propertyName] 
    { 
     get 
     { 
      errors = null; 
      switch (propertyName) 
      { 
       case "Tags": 
        if (Tags.Count <= 1) 
        { 
         errors = errorsText; 
         return "...more tags plz.."; 
        } 
        break; 
      } 
      return null; 
     } 
    } 
} 

現在我想驗證標記:

<TextBox Text="{Binding Test.Tags, Converter={StaticResource ListToStringConverter}, Mode=TwoWay, ValidatesOnDataErrors=True}" /> 

但沒有顯示錯誤。也許是因爲轉換,但我怎麼能仍然完成驗證?

回答

0

我不明白爲什麼它不應該工作。如果你第一次運行它 - SL會用紅色邊框突出顯示TextBox。但是如果你試圖改變標籤列表 - 你什麼都看不到,因爲你在你的轉換器中有一個ConvertBack中的錯誤,你返回類型數組的字符串(string []),但是屬性需要List類型的對象,所以你只需要更新ConvertBack方法:有關轉換方法

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var strValue = value as string; 

    if (strValue != null) 
     return strValue.Split(new char[] { ',' }).ToList(); 

    return null; 
} 

還要說明一點,你可以用加入方法:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var list = value as List<string>; 
    if (list != null) 
     return String.Join(", ", list); 
    return null; 
} 

還有一件事相結合的字符串。不要使用operator +,因爲你可能會遇到性能問題,請改用StringBuilder。

+0

有一個愚蠢的錯誤,將對象設置爲CurrentItem,定義了EditTemplate而不是使用我使用的Object.Property的屬性名稱:-( – jwillmer 2012-08-23 08:20:40

相關問題