WPF XAML - 如何将DataTrigger绑定到ComboBox值

时间:2014-04-14 10:21:40

标签: wpf xaml combobox datatemplate datatrigger

我目前有一个ListView,它接收一个项目并显示一个ComboBox和一个Button。

我想基于ComboBox的值等于" BlahBlahBlah"来动态显示或隐藏按钮。

目前我的<GridView>内部看起来像这样:

<GridViewColumn Header="Property" Width="160">
  <GridViewColumn.CellTemplate>
      <DataTemplate>
         <ComboBox x:Name="PropertyComboBox"
                  ItemsSource="{Binding Path=ArisingPropertyList, Mode=TwoWay}"
                  SelectedValue="{Binding ArisingProperty.PropertyName,
                  UpdateSourceTrigger=PropertyChanged}"
                  SelectedValuePath="PropertyName" Width="140" >
          </ComboBox>
        </DataTemplate>
   </GridViewColumn.CellTemplate>
</GridViewColumn>                                         


<GridViewColumn Width="30" >                                    
  <GridViewColumn.CellTemplate>                                        
     <DataTemplate>
         <Button Content="...">
            <Button.Style>
               <Style TargetType="{x:Type Button}">
                 <Style.Triggers>
                   <DataTrigger Binding="{Binding Path=SelectedValue.PropertyName, 
                    ElementName=PropertyComboBox}" Value="HideButton">
                        <Setter Property="Visibility" Value="BlahBlahBlah" />
                   </DataTrigger>
                 </Style.Triggers>
              </Style>
           </Button.Style>
        </Button>                                                
     </DataTemplate>
   </GridViewColumn.CellTemplate>
 </GridViewColumn>

有人可以指出我出错的地方吗?我得到的只是:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=PropertyComboBox'. BindingExpression:Path=SelectedValue.PropertyName; DataItem=null; target element is 'Button'; target property is 'NoTarget' (type 'Object')

1 个答案:

答案 0 :(得分:1)

您已将 SelectedValue 属性绑定到源类,因此直接绑定到该属性而不是ComboBox。问题是ComboBox和Button位于不同的Visual树中,因此无法使用ElementName绑定。

<DataTrigger Binding="{Binding Path=ArisingProperty.PropertyName}"
             Value="HideButton">
   <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>