xaml условный формат строки

Я хотел бы сделать binding с "условным" форматом цены.

Точнее, если другое свойство находится в true: отображать цену без процентов, если оно в false, отображать цену с процентами. Есть ли способ справиться с этим случаем с помощью xaml или мне просто сделать строковое свойство цены в моем коде программной части?


person Guillaume07    schedule 05.12.2016    source источник
comment
Я могу придумать два других решения: во-первых, это ValueConverter, где вы передаете условие в качестве параметра команды. Во втором случае используется триггер, в котором вы устанавливаете StringFormat в зависимости от условия. Я думаю, это сводится к тому, что вы предпочитаете. ИМО, нет неправильных способов решить эту проблему (если вы стремитесь к согласованности).   -  person Default    schedule 05.12.2016
comment
Говоря о MVVM, подойдет простое свойство в соответствующей (предметной?) модели представления. У меня часто есть обычное свойство (например, double Value), сопровождаемое такой логикой (string ValueText).   -  person Sinatr    schedule 05.12.2016
comment
@Sinatr да, я останусь с этим решением   -  person Guillaume07    schedule 05.12.2016


Ответы (1)


Вы можете использовать DataTrigger следующим образом: WPF DataBinding с условным выражением. А для других форматов значения вы можете использовать разные Converters.

Например:

<UserControl.Resources>
    <converters:ToPercentage x:Key="ToPercentage"/>
</UserControl.Resources>

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=AnotherProperty}" Value="True">
                    <Setter Property="Text" Value="{Binding Path=Price}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=AnotherProperty}" Value="False">
                    <Setter Property="Text" Value="{Binding Path=Price, Converter={StaticResource ToPercantage}}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
person EgoPingvina    schedule 05.12.2016