我在尝试建立与某些 MenuItem 控件的 IsEnabled 属性的数据绑定时遇到问题,这些控件在样式中定义并应用于按钮。该按钮在应用于用户控件上的列表的列表视图项的模板中定义。我需要将 MenuItem 控件的 IsEnabled 属性绑定到的属性是用户控件的 ViewModel 的成员,并分配给 DataContext 属性。
让我们将视图模型上的属性称为"IsMenuItem1Enabled"、"IsMenuItem2Enabled"等。
菜单
可视化树
我已经尝试了我能想到的一切来建立数据绑定,包括对类型ListView,ListBoxItem,UserControl使用FindAnstor ,但没有任何效果。任何帮助将不胜感激!
以下是样式、模板和列表视图的精简版本:
(编辑:我将ListBoxItem更新为ListViewItem(
<UserControl.Resources>
<Style x:Key="EmptyButtonStyleWithExtraMenuImage" TargetType="{x:Type Button}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu >
<MenuItem Header="Duplicate Table" Style="{StaticResource MenuItemStyle}"/>
<MenuItem Header="Edit Table" Style="{StaticResource MenuItemStyle}"/>
<MenuItem Header="View Summary" Style="{StaticResource MenuItemStyle}"/>
<Separator Style="{StaticResource SeparatorStyle}"/>
<MenuItem Header="Delete Table" Style="{StaticResource MenuItemStyle}"/>
</ContextMenu>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Image Name="ExtraMenuImage" Source="..."/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="OptionsListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Grid>
<Border >
<DockPanel LastChildFill="True" Margin="0,10,10,10">
<ContentPresenter DockPanel.Dock="Left"/>
<Button x:Name="buttonControl"
Style="{StaticResource ResourceKey=EmptyButtonStyleWithExtraMenuImage}"
DockPanel.Dock="Right"/>
</DockPanel>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<ListView x:Name="SpecificationTablesUI" Style="{StaticResource OptionsListViewStyle}"
ItemsSource="{Binding Path=SpecTables}">
<ListView.ItemTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Expander Header="{Binding TableName}" Style="{StaticResource StatusGroupExpander}">
<TextBlock Text="{Binding SelectedQuantity}"/>
</Expander>
</DockPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource OptionsListViewItemStyle}">
<Setter Property="Tag" Value="{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Dave M在上面的评论中提供了一个链接来解决这个问题。谢谢戴夫!