我目前有一个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')
答案 0 :(得分:1)
您已将 SelectedValue
属性绑定到源类,因此直接绑定到该属性而不是ComboBox。问题是ComboBox和Button位于不同的Visual树中,因此无法使用ElementName绑定。
<DataTrigger Binding="{Binding Path=ArisingProperty.PropertyName}"
Value="HideButton">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>