【发布时间】:2012-04-02 17:37:51
【问题描述】:
当我将对象绑定到 WPF 控件时,我希望根据所使用的单位系统以不同的精度级别显示属性。例如,我有一个属性IsMetric,如果值为真,我想显示小数点后一位的值,如果为假,则显示小数点后三位。目前我正在添加一个静态资源字符串,该字符串在调用InitialiseComponent()之前添加到构造函数中的资源中,如下所示:
public RoomDisplay(Room room)
{
string format = room.IsMetric ? "{0:0.0}" : "{0:0.000}";
this.Resources.Add("format", format);
InitializeComponent();
this.DataContext = room;
}
那么 Xaml 看起来像这样:
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Breadth, StringFormat={StaticResource ResourceKey=format}}" TextAlignment="Right" />
到目前为止,这一直有效。然而,这种方法在嵌入式控件中失败了,我对这种方法从来都不满意。
我研究过 DataTriggers,大致如下:
<DataTrigger Binding="{Binding IsMetric}" Value="true">
<Setter Property="Text" Value="{Binding Breadth, StringFormat=F1}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsMetric}" Value="false">
<Setter Property="Text" Value="{Binding Breadth, StringFormat=F3}"/>
</DataTrigger>
但是,添加到所有文本块中会很痛苦。理想情况下,我想把它变成一种风格,但我想不出一种方法来设置没有文本值的 StringFormat。
另一个选项是在对象中有一个格式属性并将 StringFormat 绑定到该属性,但我更愿意远离这个。有任何想法吗? 谢谢。
【问题讨论】:
-
你考虑过多值转换器吗?
-
转换器也有
System.Globalization.CultureInfo culture参数可以使用。
标签: c# wpf data-binding