内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
假设我有以下简单的类:
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
,它被绑定到CurrentPerson
成PersonHolder
-如下:
<Grid> <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}"> <TextBlock Text="{Binding Id}" /> <TextBlock Text="{Binding Name}" /> </StackPanel> </Grid>
如果是这样的话,可以:
<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>
不能在Value属性上使用绑定,但可以使用MultiBinding和IMultiValue转换器。在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>