Mvvm 获取ListView祖先的DataContext

Mvvm 获取ListView祖先的DataContext,mvvm,binding,relativesource,Mvvm,Binding,Relativesource,我正在使用MVVM开发一个WPF应用程序,需要一些帮助 对于我的AddressViewModel视图,我有一个带有listview的usercontrol。我想从listViewItem的contextmenu中执行AddresssViewModel中的命令。因为我打开的是一个上下文菜单,所以在可视化树中找不到它(我在某处读到) 以下是视图标记: <UserControl> <ListView Name="lstAddress"

我正在使用MVVM开发一个WPF应用程序,需要一些帮助

对于我的AddressViewModel视图,我有一个带有listview的usercontrol。我想从listViewItem的contextmenu中执行AddresssViewModel中的命令。因为我打开的是一个上下文菜单,所以在可视化树中找不到它(我在某处读到)

以下是视图标记:

    <UserControl>
        <ListView Name="lstAddress"
                        ItemsSource="{Binding Path=Addresses}" 
                        HorizontalAlignment="Stretch" MinHeight="150" MinWidth="100">
            <ListView.Resources>
                <ContextMenu x:Key="ItemContextMenu">
                    <MenuItem Header="Add Address"/>
                </ContextMenu>
            </ListView.Resources>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Address" DisplayMemberBinding="{Binding Path=Address}/>
                    <GridViewColumn Header="City" DisplayMemberBinding="{Binding Path=City}"/>
                </GridView>
            </ListView.View>
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </UserControl>


如果您的菜单项如下所示,它应该适合您:

                <MenuItem Header="Add Address" 
                          Command="{Binding DataContext.AddAddressCommand, 
                                RelativeSource={RelativeSource FindAncestor, 
                                    AncestorType={x:Type ListView}}}"/>

                <MenuItem Header="Add Address" 
                          Command="{Binding DataContext.AddAddressCommand, 
                                RelativeSource={RelativeSource FindAncestor, 
                                    AncestorType={x:Type ListView}}}"/>