2010-09-24 68 views
1

我試圖將對象列表綁定到列表框。每個對象都顯示在單獨的文本塊中。但問題是每個項目應以不同的格式顯示(例如日期,貨幣等)。我想將格式存儲在對象ant的屬性中,然後在設置值的同一個綁定表達式中設置格式。 所有到目前爲止我見過的例子展示瞭如何通過設置硬字符串格式編碼的:列表中的每個項目的不同字符串格式

<TextBlock Text="{Binding Value, Mode=OneWay, StringFormat=\{0:n3\}}"/>

我不知道是否有字符串格式屬性像這樣綁定任何方式:

<TextBlock Text="{Binding Value, Mode=OneWay, StringFormat={Binding myFormat}}"/>

或者也許可以通過使用值轉換器來實現。但同樣是有可能的任何屬性綁定到轉換器的參數是這樣的:

<TextBlock Text={Binding Value, Converter={StaticResource myConverter}, ConverterParameter={Binding myFormat}}"/>

+0

不幸的是(上次我選中)Converter不是一個dependencyProperty,所​​以你不能綁定它,但只給它一個固定值。 – 2010-09-24 06:42:25

回答

1

使用值轉換器,是以整個對象,並有該轉換器接入目標的ValueFormat屬性生成所需的字符串。

例子: -

public class ValueFormatConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     IValueFormat vf = value as IValueFormat; 
     if (vf != null) 
      return String.Format("{0:" + vf.Format + "}", vf.Value); 
     else 
      throw new NotSupportedException("value does not implement IValueFormat"); 
    } 
} 

已經在列表中的對象實現IValueFormat: -

public interface IValueFormat 
{ 
    object Value { get; } 
    string Format { get; } 
} 

或者

因爲你的對象既知道它的價值和使用的格式爲了說明爲什麼不簡單地添加類型類型的屬性以及對象?

如果您正在實施INotifyPropertyChanged,只要確保在值或格式發生更改時爲「FormattedValue」啓用了PropertyChanged

+0

謝謝。我會嘗試你的建議 – incognito 2010-09-24 08:46:49

相關問題