我有我想要綁定到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