В чем преимущество триггера данных muti вместо multibindig?

Я хочу, чтобы при изменении свойства анализировал значения свойств и устанавливал текст текстового блока. У меня есть это:

С многослойным переплетом:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource MyMultivalueConverter}">
            <Binding />
            <Binding Path="AnotherProperty"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

С триггером по нескольким данным:

<TextBlock HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="28">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=." Value="0" />
                        <Condition Binding="{Binding Path=AnotherProperty}" Value="True" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Text" Value="Mytext" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Основное различие, которое я вижу, заключается в том, что в мульти-привязке мне нужен многозначный преобразователь. Однако с триггером с несколькими данными мне нужно установить все комбинации, чтобы установить разные тексты, которые я хочу отображать в соответствии со значениями свойств, так что это очень тяжелая работа.

Поэтому я сомневаюсь в том, что является преимуществом триггера по нескольким данным, потому что мне нужно установить много комбинаций, и с помощью нескольких привязок я создаю конвертер, который также позволяет сложные сравнения, такие как больше, чем ... С триггером нескольких данных только значение для каждой комбинации.

Подводя итог, когда использовать множественную привязку, а когда запускать несколько данных? Каковы преимущества множественной привязки и преимущества триггера для нескольких данных?

большое спасибо.


person Álvaro García    schedule 08.01.2015    source источник


Ответы (1)


В случае MultiDataTrigger вы устанавливаете свойство в xaml, и благодаря этому вы можете использовать ресурсы, привязку данных и т. Д., Чтобы установить желаемое значение свойства, что невозможно в MultiBinding (если вы не отправляете ресурс в другой привязке и не извлекаете его из параметров или не пишете собственный конвертер). Пример:

 <Setter Property="Text" Value="{StaticResource YourResource}" />

Используя Converter, независимо от того, из Binding или MultiBinding, вы можете отслеживать данные, вставляя точки останова в метод Convert или ConvertBack, что невозможно в xaml напрямую.

Ваше беспокойство о том, какой из них более полезен, исчезает в Silverlight, где и того, и другого не существует.

person Maximus    schedule 08.01.2015
comment
Что ж, действительно можно использовать ресурсы в avconverter, как показано в этом сообщении: stackoverflow.com/questions/618648/ - person Álvaro García; 09.01.2015