首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在DataTrigger条件下使用绑定

在DataTrigger条件下使用绑定
EN

Stack Overflow用户
提问于 2010-02-11 03:47:57
回答 1查看 19.8K关注 0票数 18

假设我有以下简单的类:

代码语言:javascript
复制
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class PersonHolder
{
    public Person CurrentPerson { get; set; }
    public int ActiveId { get; set; }
}

现在我有一个网格,它有一个PersonHolder类的实例作为DataContext,并且在网格中我有一个StackPanel,它绑定到PersonHolderCurrentPerson -显示它的数据:

代码语言:javascript
复制
<Grid>
    <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
        <TextBlock Text="{Binding Id}" />
        <TextBlock Text="{Binding Name}" />            
    </StackPanel>        
</Grid>

所以-关于这个问题:当StackPanel有一个与PersonHolderId匹配的ActiveId时,我如何给PersonHolder一个绿色的背景(是的,非常有用,但这只是一个非常简单的例子。)我的想法是,这是一个使用触发器的东西,但我可以在我的触发器条件值中使用绑定吗?如果是这样的话,我可以这样做:

代码语言:javascript
复制
<Grid x:Name="Foo">
    <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
        <TextBlock Text="{Binding Id}" />
        <TextBlock Text="{Binding Name}" />
        <StackPanel.Triggers>
            <DataTrigger Binding="{Binding Id}" Value="{Binding ElementName=Foo, Path=ActiveId}">
                <Setter TargetName="PersonPanel" Property="Background" Value="Green" />
            </DataTrigger>
        </StackPanel.Triggers>
    </StackPanel>        
</Grid>

但这不管用。我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-11 19:59:46

不能在Value属性上使用绑定,但可以通过使用MultiBindingIMultiValueConverter来解决此问题。我会在Style中定义我的Trigger,例如Window.Resources,它会给出类似这样的结果:

代码语言:javascript
复制
<Window.Resources>
    <local:SomeMultiConverter x:Key="someMultiConverter" />
    <Style x:Key="someStyle" TargetType="StackPanel">
        <Setter Property="StackPanel.Background" Value="Red" />
        <Style.Triggers>
            <DataTrigger Value="True">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource someMultiConverter}">
                        <Binding Path="Id"></Binding>
                        <Binding ElementName="Foo" Path="DataContext.ActiveId"></Binding>
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="StackPanel.Background" Value="Green" />
            </DataTrigger>
        </Style.Triggers>
    </Style> 
</Window.Resources>
<Grid x:Name="Foo">
    <StackPanel DataContext="{Binding CurrentPerson}" Style="{StaticResource someStyle}" >
        <TextBlock Text="{Binding Id}" />
        <TextBlock Text="{Binding Name}" />
    </StackPanel>
</Grid>

有关MultiBindingIMultiValueConverter的示例,请参阅this link。它们相当容易编写。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2239839

复制
相关文章

相似问题

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