`ContextMenu` ListView.ItemContainerStyle`中的命令绑定无效

问题描述 投票:0回答:1

我有一个列表视图,我想根据ListView列中的某个值隐藏ContextMenuItems。我可以通过将ContextMenu移到ListView.ItemContainerStyle来实现。现在我的问题是我无法在MenuItem上触发命令。当ContextMenu直接设置为ListView时,此功能就可以使用。

这是我尝试过和失败的。 (使用ElementTypeElementName,直接呼叫等。)>

 <UserControl Name="RootElement" DataContext=.Some Context.....>     
 <ListView ItemsSource="{Binding LicensesView}">
                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Setter Property="ContextMenu">
                            <Setter.Value>
                                <ContextMenu>
                                    <MenuItem Header="Refresh 1" Command="{Binding Path=DataContext.LicenseListRefreshCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
                                    <MenuItem Header="Refresg 2" Command="{Binding Path=DataContext.LicenseListRefreshCommand, RelativeSource={RelativeSource AncestorType=Window, Mode=FindAncestor}}"/>
                                    <MenuItem Header="Refresh 3" Command="{Binding Path= DataContext.LicenseListRefreshCommand, ElementName=RootElement}" Visibility="{Binding Path=Aktif,Converter= {StaticResource BoolToVisibility}}"/>
                                    <MenuItem Header="Refresh 4" Command="{Binding LicenseListRefreshCommand}"/>
                                </ContextMenu>
                            </Setter.Value>                           
                        </Setter>
                  </Style>
                </ListView.ItemContainerStyle>
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Code" DisplayMemberBinding="{Binding Code}" Width="Auto"/>
                        <GridViewColumn Header="Active" DisplayMemberBinding="{Binding Active}" Width="150" />
                        <GridViewColumn Header="Company" DisplayMemberBinding="{Binding Company}" Width="60" />
                        <GridViewColumn Header="Demo" DisplayMemberBinding="{Binding Demo}" Width="Auto" />
                    </GridView>
                </ListView.View>
            </ListView>
</UserControl>

我有一个列表视图,我想根据ListView列中的某些值隐藏ContextMenuItems。我可以通过将ContextMenu移到ListView.ItemContainerStyle来实现。现在我的问题是...

c# wpf mvvm data-binding wpf-controls
1个回答
0
投票

之所以不起作用,是因为Style是一个Disconnected属性,因此它不尊重视觉树。我通过使用绑定代理来解决此问题,如this answer中所示。

© www.soinside.com 2019 - 2024. All rights reserved.