2010-01-04 143 views
0

我有我想要綁定到ListView控件的對象的集合。在一些對象中,將在ListView的列中顯示的屬性的值是空字符串(「」)。我想使用綁定自動替換空字符串(「」)與「n/a」。WPF ListView數據綁定?

我該如何做到這一點?

回答

3

定義的值轉換器:

class EmptyToN_AConverter : IValueConverter 
{ 
    public object Convert(
     object value, 
     Type targetType, 
     object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     string s = value.ToString(); 
     if (string.IsNullOrEmpty(s)) return "N/A"; 
     return s; 
    } 

    public object ConvertBack(
     object value, 
     Type targetType, 
     object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

例XAML:

<Window.Resources> 
    ... 
    <local:EmptyToN_AConverter x:Key="NAConverter"/> 
</Window.Resources> 

...{Binding Path=TheProperty, Converter={StaticResource NAConverter}}... 

您可能甚至參數化轉換器和暴露 「N/A」 在XAML:

public object Convert(
     object value, 
     Type targetType, 
     object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     string s = value.ToString(); 
     if (string.IsNullOrEmpty(s)) return parameter.ToString(); 
     return s; 
    } 

...{Binding Path=TheProperty, 
      Converter={StaticResource NAConverter}, 
      ConverterParameter=N/A}... 
+0

謝謝!這對我來說非常合適。 – joek1975 2010-01-04 23:04:19

1

您可以隨時添加一個只讀屬性到您想要顯示的格式化的綁定對象。

public string Property 
{ 
    get; 
    set; 
} 
public string PropertyDescriptor 
{ 
    get 
    { 
    if (string.IsNullOrEmpty(this.Property)) 
     return "n/a"; 
    else 
     return this.Property; 
    } 
} 

如果您使用的是MVVM,此方法運行良好。

+0

如果你正在做MVVM,請確保在屬性設置器中爲Property和PropertyDescriptor屬性通知提出 – kenwarner 2010-01-04 22:36:02

+0

當然,我只是試圖簡短。 – opedog 2010-01-05 14:59:56

+0

+1首選使用ValueConverter或Trigger的方法,因爲您可以輕鬆編寫測試以驗證屬性是否正確顯示。 – jeremyalan 2011-04-09 16:32:00

0
public string MyProperty 
    { 
     get 
     { 
      if (String.IsNullOrEmpty(_myProperty)) 
       return "n/a"; 
      else 
       return _myProperty; 
     } 
     set 
     { 
      if (_myProperty != value) 
      { 
       _myProperty = value; 
       RaisePropertyChanged("MyProperty") 
      } 
     } 
    } 
1

使用BindingBase.TargetNullValue pro perty:

<GridViewColumn DisplayMemberBinding="{Binding MyProperty, TargetNullValue=N/A}"/> 

編輯:正如Aviad指出的那樣,這將只適用於空值而不是空字符串。我不會刪除這個答案,因爲它對其他人仍然有用。

+0

好的電話。也有用的是.FallbackValue當綁定無法返回值 – kenwarner 2010-01-04 22:44:33

+0

-1特別是對於問的問題,這是行不通的。他說這是一個空字符串,不是空值。 – 2010-01-04 22:44:34

+0

@Aviad:好點,我誤解了這個問題...... – 2010-01-04 22:52:58