2010-01-04 147 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