Связывание данных WPF ListView? - PullRequest
0 голосов
/ 05 января 2010

У меня есть коллекция объектов, которые я хочу привязать к элементу управления ListView. В некоторых объектах значение свойства, которое будет отображаться в столбце в ListView, представляет собой пустую строку (""). Я хочу заменить пустую строку ("") на "n / a" автоматически, используя привязку.

Как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 05 января 2010

Определить значение преобразователя:

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}...
1 голос
/ 05 января 2010

Используйте свойство BindingBase.TargetNullValue :

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

РЕДАКТИРОВАТЬ: как указано Aviad, это будет работать только для нулевого значения, а не пустой строки. Я не удаляю этот ответ, потому что он все еще может быть полезен для других.

1 голос
/ 05 января 2010

Вы всегда можете добавить свойство только для чтения к вашему связанному объекту, которое форматирует то, что вы хотите отобразить.

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

Это работает довольно хорошо, если вы используете MVVM.

0 голосов
/ 05 января 2010
    public string MyProperty 
    { 
        get
        {
            if (String.IsNullOrEmpty(_myProperty))
                return "n/a";
            else
                return _myProperty;
        }
        set 
        {
            if (_myProperty != value)
            { 
                _myProperty = value;
                RaisePropertyChanged("MyProperty")
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...