【发布时间】:2011-01-01 10:39:32
【问题描述】:
我有一组希望绑定到 ListView 控件的对象。在某些对象中,将在 ListView 的列中显示的属性的值是空字符串 ("")。我想使用绑定自动将空字符串(“”)替换为“n/a”。
我怎样才能做到这一点?
【问题讨论】:
标签: wpf data-binding listview binding wpf-controls
我有一组希望绑定到 ListView 控件的对象。在某些对象中,将在 ListView 的列中显示的属性的值是空字符串 ("")。我想使用绑定自动将空字符串(“”)替换为“n/a”。
我怎样才能做到这一点?
【问题讨论】:
标签: wpf data-binding listview binding wpf-controls
您始终可以向绑定对象添加只读属性,以格式化您想要显示的内容。
public string Property
{
get;
set;
}
public string PropertyDescriptor
{
get
{
if (string.IsNullOrEmpty(this.Property))
return "n/a";
else
return this.Property;
}
}
如果您使用 MVVM,这将非常有效。
【讨论】:
public string MyProperty
{
get
{
if (String.IsNullOrEmpty(_myProperty))
return "n/a";
else
return _myProperty;
}
set
{
if (_myProperty != value)
{
_myProperty = value;
RaisePropertyChanged("MyProperty")
}
}
}
【讨论】:
定义一个值转换器:
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}...
【讨论】:
使用BindingBase.TargetNullValue 属性:
<GridViewColumn DisplayMemberBinding="{Binding MyProperty, TargetNullValue=N/A}"/>
编辑:正如 Aviad 所指出的,这仅适用于空值,而不适用于空字符串。我不会删除此答案,因为它对其他人仍然有用。
【讨论】: