2009-05-11 3 views
1

Ich entwickle eine WPF-App mit MVVM und brauche etwas Hilfe.Get DataContext von ListView Ancestor

für die Ansicht meines AddressesViewModel Ich habe eine Benutzersteuerung mit einem Listview. Ich möchte einen Befehl im AddressesViewModel aus dem Kontextmenü des listViewItem ausführen. Da ich ein ContextMenu öffne, wird es nicht im visuellen Baum gefunden (ich habe das irgendwo gelesen). Hier

ist der Ansicht Markup:

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

Hier ist die Ansichtsmodell Klassen:

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

Vielen Dank im Voraus

Antwort

3

Wenn Ihr MenuItem so aussieht, sollte es für Sie arbeiten:

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