在DataTrigger条件中使用绑定

时间:2010-02-10 19:47:57

标签: .net wpf data-binding datatrigger

假设我有以下简单类:

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

现在我有一个带有PersonH​​older类的实例的网格为DataContext,并且在网格中我有StackPanel绑定到CurrentPerson的{​​{1}} - 显示其数据:

PersonHolder

那么 - 问题:当<Grid> <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}"> <TextBlock Text="{Binding Id}" /> <TextBlock Text="{Binding Name}" /> </StackPanel> </Grid> 的{​​{1}}与StackPanel CurrentPerson匹配时,如何为Id提供绿色背景(是的,非常有用,但这只是一个非常简单的例子.. )。我的想法是,这是一个使用触发器的东西,但我可以在触发条件值中使用绑定吗?如果是这样,我可以这样做:

ActiveId

但这不起作用。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:35)

您无法在Value属性上使用绑定,但可以使用MultiBindingIMultiValueConverter来解决此问题。我会在Trigger中定义Style。 Window.Resources,它会提供这样的东西:

<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。他们写起来相当容易。