我正在尝试将对象列表绑定到列表框。每个对象都显示在单独的文本块中。但问题是每个项目应以不同的格式显示(例如日期,货币等)。我想将格式存储在对象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 :(得分:1)
使用值转换器获取整个对象并让此转换器访问对象的Value
和Format
属性以生成所需的字符串。
实施例: -
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; }
}
<强>替代地强>
由于您的对象知道其值和用于显示值的格式,为什么不简单地向对象添加类型为FormattedValue
的只读string
属性?
如果您要实施INotifyPropertyChanged
,请确保每当值或格式发生变化时,都会针对“FormattedValue”触发PropertyChanged
。