更改StringFormat

时间:2019-02-11 12:10:58

标签: c# wpf

我有两种不同的货币£和€

我不能使用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" />

但是不知何故,英国或法国不会激活触发器

2 个答案:

答案 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)

您可以将StyleDataTrigger绑定到Country属性,并设置Language的{​​{1}}属性:

TextBox