0

我希望当属性更改时,分析属性的值并设置文本块的文本。我有这个:

使用多重绑定:

<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>

我看到的主要区别是在多重绑定中我需要一个多值转换器。但是,对于多数据触发器,我需要设置所有组合以根据属性的值设置我想要显示的不同文本,所以这是一项非常艰苦的工作。

所以我怀疑哪个是多数据触发器的优势,因为我需要设置许多组合,并且使用多绑定我创建了一个转换器,它还允许复杂的比较,如大于,小于......使用多数据触发器只有一个值对于每个组合。

总而言之,什么时候使用多绑定,什么时候多数据触发?多绑定的优势和多数据触发器的优势是什么?

非常感谢。

4

1 回答 1

1

MultiDataTrigger的情况下,您可以在 xaml 中设置属性,因此您可以使用资源、数据绑定等来将属性的值设置为所需的,这在MultiBinding中是不可能的(除非您在另一个绑定中发送资源并从参数中检索它或编写自定义转换器)。例子:

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

通过使用 Converter,无论是来自Binding还是MultiBinding,您都可以通过在 Convert 或 ConvertBack 方法中插入断点来跟踪数据,这是直接在 xaml 中无法实现的。

在两者都不存在的 Silverlight 中,您对哪个更有用的担忧消失了。

于 2015-01-08T20:06:43.590 回答