在纯 XAML 中,是否可以即时 select 字符串格式?

In pure XAML, is it possible to select a string format on the fly?

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

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

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

我想知道是否可以只使用纯 XAML select 正确的字符串格式?

使用几个数据触发器很容易:

<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 的 class,它有一个 string 属性 Name。 VM 有一个名为 CurrenciesObservableCollection<Currency>、一个名为 SelectedCurrencyCurrency 实例和一个名为 Pricedecimal 属性。