Когда я связываю объект с элементом управления WPF, я хочу отображать свойства с разным уровнем точности в зависимости от используемой системы единиц. Например, у меня есть свойство IsMetric
, если значение равно true, я хочу отображать значения с одним десятичным знаком, если оно равно false, то с тремя десятичными знаками. В настоящее время я добавляю статическую строку ресурсов, которая добавляется к ресурсам в конструкторе перед вызовом 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 без текстового значения.
Другой вариант - иметь свойство format в объекте и привязывать к нему StringFormat, но я бы предпочел держаться подальше от этого. Есть идеи?
Спасибо.