我有两种不同的货币£和€
我不能使用StringFormat = {} {0:C0},因为每次都只显示£。
<TextBox Text="{Binding MinAmount, StringFormat={}{0:C0}.00}" />
我有国家(地区)财产“ UK”或“ EURO” 但是,如果要在显示之前更改货币符号,我将如何使用if语句?
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel >
<TextBox Text="{Binding MinAmount}" Width="105" VerticalContentAlignment="Center" HorizontalContentAlignment="Right">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrencyForSelectedCompany}" Value="UK">
<Setter Property="Language" Value="en-GB" />
</DataTrigger>
<DataTrigger Binding="{Binding CurrencyForSelectedCompany}" Value="EIRE">
<Setter Property="Language" Value="fr-FR" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</DataTemplate>
我放置了此文本框,以确保触发器检查正确的数据
<TextBox Text="{Binding CurrencyForSelectedCompany}" Width="100" />
但是不知何故,英国或法国不会激活触发器
答案 0 :(得分:1)
如果您在单独的属性中拥有金额和货币,则可以使用IMultiConverter从一个TextBox中显示和修改这两个属性。
XAML:
<Window.Resources>
<localResource:MyMultiCurrencyConverter x:Key="MyMultiCurrencyConverter"/>
</Window.Resources>
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{StaticResource MyMultiCurrencyConverter}">
<Binding Path="MyAmount"/>
<Binding Path="MyCurrency"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
C#:
public class MyMultiCurrencyConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.Aggregate((a, b) => $"{a} {b}");
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
var toReturn = value.ToString().Split(' ');
return toReturn;
}
}
以上内容基于ViewModel中的两个不同的字符串属性。您必须在ConvertBack方法中拆分值,并将其强制转换为要绑定到的正确类型。
答案 1 :(得分:0)
您可以将Style
与DataTrigger
绑定到Country
属性,并设置Language
的{{1}}属性:
TextBox