2009-05-11 2 views
1

Я разрабатываю приложение WPF с использованием MVVM и нуждаюсь в некоторой помощи.Получить DataContext предка ListView

для просмотра моего AddressesViewModel У меня есть usercontrol со списком. Я хотел бы выполнить команду, найденную в AddressesViewModel, из контекстного меню listViewItem. Поскольку я открываю ContextMenu, он не найден в визуальном дереве (я читал это где-то).

Вот Просмотр разметки:

<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> 

Вот это ViewModel классы:

public class AddressesViewModel 
{ 
    public List<AddressViewModel> Addresses { get; set; } 

    public ICommand AddAddressCommand { get; set; } 
} 

public class AddressViewModel 
{ 
    public String Address { get; set; } 
    public String City { get; set; } 
    public String State { get; set; } 
    public String Zip { get; set; } 
} 

Заранее спасибо

ответ

3

Если MenuItem выглядит так, он должен работать для вас:

   <MenuItem Header="Add Address" 
          Command="{Binding DataContext.AddAddressCommand, 
           RelativeSource={RelativeSource FindAncestor, 
            AncestorType={x:Type ListView}}}"/> 
Смежные вопросы