我有我想要绑定到ListView控件的对象的集合。在一些对象中,将在ListView的列中显示的属性的值是空字符串(“”)。我想使用绑定自动替换空字符串(“”)与“n/a”。WPF ListView数据绑定?
我该如何做到这一点?
我有我想要绑定到ListView控件的对象的集合。在一些对象中,将在ListView的列中显示的属性的值是空字符串(“”)。我想使用绑定自动替换空字符串(“”)与“n/a”。WPF ListView数据绑定?
我该如何做到这一点?
定义的值转换器:
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}...
您可以随时添加一个只读属性到您想要显示的格式化的绑定对象。
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属性通知提出 – kenwarner 2010-01-04 22:36:02
当然,我只是试图简短。 – opedog 2010-01-05 14:59:56
+1首选使用ValueConverter或Trigger的方法,因为您可以轻松编写测试以验证属性是否正确显示。 – jeremyalan 2011-04-09 16:32:00
public string MyProperty
{
get
{
if (String.IsNullOrEmpty(_myProperty))
return "n/a";
else
return _myProperty;
}
set
{
if (_myProperty != value)
{
_myProperty = value;
RaisePropertyChanged("MyProperty")
}
}
}
使用BindingBase.TargetNullValue pro perty:
<GridViewColumn DisplayMemberBinding="{Binding MyProperty, TargetNullValue=N/A}"/>
编辑:正如Aviad指出的那样,这将只适用于空值而不是空字符串。我不会删除这个答案,因为它对其他人仍然有用。
好的电话。也有用的是.FallbackValue当绑定无法返回值 – kenwarner 2010-01-04 22:44:33
-1特别是对于问的问题,这是行不通的。他说这是一个空字符串,不是空值。 – 2010-01-04 22:44:34
@Aviad:好点,我误解了这个问题...... – 2010-01-04 22:52:58
谢谢!这对我来说非常合适。 – joek1975 2010-01-04 23:04:19