2014-01-08 2 views
18

Я столкнулся с ситуацией, когда я легко могу достичь такой же функциональности, используя MultiDataTrigger или, альтернативно, используя DataTrigger с MultiBinding. Существуют ли какие-либо существенные причины, чтобы предпочесть один подход по сравнению с другим?MultiDataTrigger vs DataTrigger with multibinding

С MultiDataTrigger:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=SomePath}" Value="SomeValue"/> 
     <Condition Binding="{Binding Path=SomeOtherPath, Converter={StaticResource SomeConverter}}" Value="SomeOtherValue"/> 
    </MultiDataTrigger.Conditions> 
    <MultiDataTrigger.EnterActions> 
     <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/> 
    </MultiDataTrigger.EnterActions> 
</MultiDataTrigger> 

С MultiBinding:

<DataTrigger Value="foo"> 
    <DataTrigger.Binding> 
     <MultiBinding Converter="{StaticResource fooConv}"/> 
      <Binding Path=SomePath/> 
      <Binding Path=SomeOtherPath/> 
     </MultiBinding> 
    </DataTrigger.Binding> 
    <DataTrigger.EnterActions> 
     <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/> 
    </DataTrigger.EnterActions> 
</DataTrigger> 
+0

Использование MultiDataTrigger обычно сэкономит вам многозначный преобразователь. См. [Этот вопрос] (http://stackoverflow.com/q/20990881/1136211), размещенный сегодня. – Clemens

+0

Если один подход требует значительно больших усилий, чем другой, который повлияет на мои расчеты. В этом случае любой подход предполагает использование конвертера - на самом деле у меня есть подходящие конвертеры, и их не нужно писать, но если бы я этого не сделал, все равно не было бы (в этом случае) сделать один подход более привлекательным чем другой. – mcwyrm

+0

В обоих примерах вам нужен конвертер, поэтому, если вы уже не реализовали их, я бы пошел с решением 'MultiDataTrigger', поскольку' SomeConverter' с большей вероятностью будет использоваться где-то еще, а 'fooConv', скорее всего, не собирается использоваться в других местах. –

ответ

10

Multibinding требуется конвертер для всех, кроме редких случаях (с помощью StringFormat).

MultiTrigger Требуется только конвертер, чтобы получить результаты привязки в boolean.

+0

Отказ от усилий, которые могут возникнуть при написании конвертера, есть ли какие-то особые причины, чтобы избежать его использования? – mcwyrm

+6

Только усилия. Я нахожу, что это мощный мотиватор: D – Gusdor

Смежные вопросы