使用模板和样式时的 WPF 数据绑定



我在尝试建立与某些 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在上面的评论中提供了一个链接来解决这个问题。谢谢戴夫!

相关内容

  • 没有找到相关文章

最新更新