Dot-Net

在 DataTrigger 條件下使用綁定

  • February 10, 2010

假設我有以下簡單的類:

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綁定到CurrentPersonof PersonHolder- 顯示它的數據:

<Grid>
   <StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
       <TextBlock Text="{Binding Id}" />
       <TextBlock Text="{Binding Name}" />            
   </StackPanel>        
</Grid>

所以 - 對於這個問題:當有一個匹配的(是的*,非常有用,但這只是一個非常簡化的例子..*)時,我怎樣才能給StackPanel綠色背景。我的想法是這是一個使用觸發器的東西,但是我可以在我的觸發器條件值中使用綁定嗎?如果是這樣,我可以做這樣的事情:CurrentPerson``Id``ActiveId``PersonHolder

<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 屬性上使用綁定,但可以通過使用MultiBindingIMultiValueConverter來解決這個問題。我會在例如 Window.Resources 中定義我TriggerStyle,它會給出如下內容:

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

有關和的範例,請參見此連結。它們相當容易編寫。MultiBinding``IMultiValueConverter

引用自:https://stackoverflow.com/questions/2239839