在纯XAML中,是否可以动态地选择字符串格式?
本文关键字:选择 字符串 格式 动态 XAML 是否 在纯 | 更新日期: 2023-09-27 17:55:05
我必须显示一个表示价格的小数。
如果价格是英国便士或日元,则需要显示到小数点后4位,否则需要显示到小数点后6位。
货币被编码为字符串,并且将是GBp
或YEN
或其他(例如EUR
)。货币字符串和价格都在ViewModel中。我使用MVVM
我想知道是否有可能使用纯XAML选择正确的字符串格式?
使用几个数据触发器很简单:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ListBox Grid.Row="0"
ItemsSource="{Binding Currencies}"
SelectedItem="{Binding SelectedCurrency,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name" />
<TextBlock FontSize="30" Grid.Row="1">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Price, UpdateSourceTrigger=PropertyChanged, StringFormat=C6}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedCurrency.Name}" Value="GBP">
<Setter Property="Text" Value="{Binding Price, UpdateSourceTrigger=PropertyChanged, StringFormat=C4}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=SelectedCurrency.Name}" Value="YEN">
<Setter Property="Text" Value="{Binding Price, UpdateSourceTrigger=PropertyChanged, StringFormat=C4}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
对于上面的例子,我创建了一个名为Currency
的类,它具有string
属性Name
。该虚拟机有一个ObservableCollection<Currency>
称为Currencies
,一个Currency
的实例称为SelectedCurrency
,一个decimal
的属性称为Price
。