在纯XAML中,是否可以动态地选择字符串格式?

本文关键字:选择 字符串 格式 动态 XAML 是否 在纯 | 更新日期: 2023-09-27 17:55:05

我必须显示一个表示价格的小数。

如果价格是英国便士或日元,则需要显示到小数点后4位,否则需要显示到小数点后6位。

货币被编码为字符串,并且将是GBpYEN或其他(例如EUR)。货币字符串和价格都在ViewModel中。我使用MVVM

我想知道是否有可能使用纯XAML选择正确的字符串格式?

在纯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