WPF ListView数据绑定?

时间:2010-01-04 22:29:22

标签: wpf data-binding listview binding wpf-controls

我有一组对象,我希望绑定到ListView控件。在某些对象中,将在ListView的列中显示的属性值为空字符串(“”)。我想使用绑定自动将空字符串(“”)替换为“n / a”。

我该如何做到这一点?

4 个答案:

答案 0 :(得分: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}}...

您甚至可以参数化转换器并在XAML中公开“N / A”:

    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}...

答案 1 :(得分:1)

您始终可以向绑定对象添加只读属性,格式化您想要显示的内容。

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

如果您正在使用MVVM,这非常有用。

答案 2 :(得分:1)

使用BindingBase.TargetNullValue属性:

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

编辑:正如Aviad所指出的,这只适用于空值,而不是空字符串。我不删除这个答案,因为它对其他人来说仍然有用。

答案 3 :(得分:0)

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