Frage

Ich habe eine Benutzersteuerung mit einem Listview mit einfachen Elementen aus einer ObservableCollection. Ich möchte die ContextMenu dieser Listview-Elemente enthalten je nachdem, was in der Listview ausgewählt ist. Wenn kein Element ausgewählt wird, sollten einige MenuItems nicht sichtbar sein.

ist mein Konverter nicht einmal genannt, wenn ich die ContextMenu öffnen. Die Bindung scheint falsch zu sein, ich dies im Ausgabefenster finden:

  

System.Windows.Data Fehler: 4: Können nicht Quelle für die Bindung mit Bezug finden ‚Elementname = Listview‘. Binding: Path = SelectedItem; DataItem = null; Zielelement ist 'MenuItem' (Name = ''); Zieleigenschaft ist ‚Sichtbarkeit‘ (Typ ‚Sichtbarkeit‘)

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

Hier ist etwas vereinfacht 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!

War es hilfreich?

Lösung

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

<MenuItem Header="Open"
    Visibility="{Binding RelativeSource={RelativeSource FindAncestor,
        AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem,
        Converter={StaticResource valueToVisibility}}" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top