【问题标题】:WPF ListView Data Binding?WPF ListView 数据绑定?
【发布时间】:2011-01-01 10:39:32
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果您使用 MVVM,这将非常有效。

    【讨论】:

    • 如果您正在执行 MVVM,请确保在您的属性设置器中为 Property 和 PropertyDescriptor 提出属性通知
    • +1 比使用 ValueConverter 或 Trigger 更喜欢这种方法,因为您可以轻松编写测试来验证 Property 是否正确显示。
    【解决方案2】:
        public string MyProperty 
        { 
            get
            {
                if (String.IsNullOrEmpty(_myProperty))
                    return "n/a";
                else
                    return _myProperty;
            }
            set 
            {
                if (_myProperty != value)
                { 
                    _myProperty = value;
                    RaisePropertyChanged("MyProperty")
                }
            }
        }
    

    【讨论】:

      【解决方案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}...
      

      【讨论】:

        【解决方案4】:

        使用BindingBase.TargetNullValue 属性:

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

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

        【讨论】:

        • 好电话。当绑定无法返回值时,.FallbackValue 也很有用
        • -1 特别针对所提出的问题,这是行不通的。他说这是一个空字符串,不是空值。
        猜你喜欢
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 2014-04-30
        相关资源
        最近更新 更多