2009-06-20 10 views
7

Ich habe ein Benutzersteuerelement mit einem ListView, das einfache Elemente aus einer ObservableCollection enthält. Ich möchte, dass das ContextMenu dieser ListView Elemente enthält, abhängig davon, was in der ListView ausgewählt ist. Wenn kein Element ausgewählt ist, sollten einige MenuItems nicht sichtbar sein.ContextMenu's MenuItem-Sichtbarkeit an ListView-Auswahl binden

Mein Konverter wird nicht einmal aufgerufen, wenn ich das ContextMenu öffne. Die Bindung scheint falsch zu sein, finde ich diese im Ausgabefenster:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=listView'. BindingExpression:Path=SelectedItem; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Visibility' (type 'Visibility')

Ich verstehe nicht, was falsch ist und kann es nicht durch das Suchen im Internet herausfinden.

hier etwas vereinfachte Code:

<UserControl x:Class="MyApp.DatabaseControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:l="clr-namespace:MyApp" 
Height="Auto" 
Width="Auto"> 

<UserControl.Resources> 
    <l:ValueToVisibilityConverter x:Key="valueToVisibility" /> 
</UserControl.Resources> 

<Grid> 
    <ListView x:Name="listView" ItemsSource="{Binding Persons}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="140" Header="First Name" DisplayMemberBinding="{Binding FirstName}"/> 
       <GridViewColumn Width="140" Header="Last Name" DisplayMemberBinding="{Binding LastName}" /> 
      </GridView> 
     </ListView.View> 

     <ListView.ContextMenu> 
      <ContextMenu> 
       <MenuItem 
        Header="Open" 
        Visibility="{Binding SelectedItem, ElementName=listView, Converter={StaticResource valueToVisibility}}"/> 
       <Separator/> 
       <MenuItem Header="Add..."/> 
       <MenuItem Header="Remove"/> 
      </ContextMenu> 
     </ListView.ContextMenu> 
    </ListView> 
</Grid> 

Vielen Dank!

Antwort

7

Das Problem ist, dass die ContextMenu ist nicht in der gleichen visuellen Struktur wie die ListBox daher Bindungen finden nicht die ListBox. Wenn Sie gegen PlacementTarget binden, sollte das den Trick tun:

+0

Danke, das hat den Trick !! – fury

+0

Wenn diese Frage beantwortet wurde, sollten Sie sie als Akzeptiert markieren, damit sie nicht mehr als unbeantwortete Frage angezeigt wird. – Andy