首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多绑定的MultiDataTrigger与DataTrigger

使用多绑定的MultiDataTrigger与DataTrigger
EN

Stack Overflow用户
提问于 2014-01-08 18:44:12
回答 2查看 29.1K关注 0票数 35

我遇到了这样一种情况:我可以通过使用MultiDataTrigger或使用带有MultiBindingDataTrigger轻松地实现相同的功能。有没有什么实质性的理由让我们选择其中一种方法呢?

使用MultiDataTrigger:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2014-01-08 18:49:00

除了极少数情况(使用StringFormat)之外,Multibinding都需要一个转换器。

MultiTrigger只需要一个转换器就可以将绑定结果转换为boolean%s。

票数 15
EN

Stack Overflow用户

发布于 2019-03-13 23:37:03

我想再详述一下。

对我来说,MultiBindingMultiDataTrigger是根本不同的,虽然在某些情况下你可以使用两者来实现相同的功能,但让两者以相同的方式工作感觉有点像黑客。

当您需要单独满足多个条件()以便执行操作(设置属性值、开始动画等)时,应使用MultiDataTrigger。例如,您需要A为true,B为false。这两种情况本身都可以单独解释。这就是这个问题的情况。

另一方面,当您需要多个参数来计算您选择的单个输出时,应该使用MultiBindings。此输出需要具有一定的值才能设置该属性。例如,只有当A等于B时,才能更改属性值。当您在多个控件上使用相同的样式,并且A是控件的属性(例如,TextBlock的Text属性),而B是视图模型中名为"SelectedText“的单个属性时,这是有意义的。因此,我们可能要解决的一个问题是:在我的视图上的所有TextBlocks中,将我的视图模型中与属性SelectedText具有相同文本的一个的前景设置为闪烁(颜色变化动画)。

在您的示例中,我将使用MultiDataTrigger,因为您的条件可以单独评估。否则,您的MultiValueConverter将只检查您的第二个条件,忽略第一个条件,并且将没有真正的目的作为一个真正的MultiDataTrigger。

我将把XAML留给示例,在这里我将使用上面提到的带有MultiBindingDataTrigger:(我假设您使用的是MVVM模式)

代码语言:javascript
复制
<Style TargetType="{x:Type TextBlock}" x:Key="SelectedTextStyle">
    <Setter Property="FontFamily" Value="Segoe UI Light"/>
    <Setter Property="FontSize" Value="24"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
               <MultiBinding Converter="{StaticResource StringsToBooleanConverter}">
                    <Binding Path="SelectedText"/> <!--This is a property of the View Model-->
                    <Binding RelativeSource="{RelativeSource Self}" Path="Text"/> <!--This is the Dependency Property 'Text' of the TextBlock control-->
                </MultiBinding>
            </DataTrigger.Binding>
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="Foreground.Color" Duration="0:0:2" From="Black" To="DarkOrange" AutoReverse="True" FillBehavior="HoldEnd" RepeatBehavior="Forever"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="Foreground.Color" Duration="0:0:0" From="DarkOrange" To="Black" FillBehavior="HoldEnd"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20993293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档