在纯 XAML 中,是否可以即时 select 字符串格式?
In pure XAML, is it possible to select a string format on the fly?
我必须显示代表价格的小数。
如果价格是英镑或日元,需要显示到小数点后4位,否则需要显示到小数点后6位。
货币编码为字符串,将是 GBp
或 YEN
或其他(例如 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 有一个名为 Currencies
的 ObservableCollection<Currency>
、一个名为 SelectedCurrency
的 Currency
实例和一个名为 Price
的 decimal
属性。
我必须显示代表价格的小数。
如果价格是英镑或日元,需要显示到小数点后4位,否则需要显示到小数点后6位。
货币编码为字符串,将是 GBp
或 YEN
或其他(例如 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 有一个名为 Currencies
的 ObservableCollection<Currency>
、一个名为 SelectedCurrency
的 Currency
实例和一个名为 Price
的 decimal
属性。