Изменить StringFormat - PullRequest
       1

Изменить StringFormat

0 голосов
/ 11 февраля 2019

У меня есть две разные валюты £ и €

Я не могу использовать StringFormat = {} {0: C0}, потому что это показывает только £ каждый раз.

<TextBox  Text="{Binding MinAmount, StringFormat={}{0:C0}.00}" />

У меня есть свойство Country "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" />

Но почему-то Великобритания или FR не активируют триггер

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете использовать Style с DataTrigger, который привязывается к вашему свойству Country и устанавливает свойство Language TextBox:

<TextBox Text="{Binding MinAmount, StringFormat={}{0:C0}.00}">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="Language" Value="fr-FR" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Country}" Value="UK">
                    <Setter Property="Language" Value="en-GB" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
0 голосов
/ 11 февраля 2019

Если у вас есть сумма и валюта в отдельных свойствах, вы можете использовать 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 и привести к правильным типам, к которым вы привязываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...