我有一组对象,我希望绑定到ListView控件。在某些对象中,将在ListView的列中显示的属性值为空字符串(“”)。我想使用绑定自动将空字符串(“”)替换为“n / a”。
我该如何做到这一点?
答案 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")
}
}
}