У меня есть пользовательский элемент управления с ListView, содержащий простые элементы из ObservableCollection. Я хотел бы, чтобы ContextMenu этого ListView содержал элементы в зависимости от того, что выбрано в ListView. Если элемент не выбран, некоторые элементы меню не должны отображаться.
Мой конвертер даже не вызывается, когда я открываю ContextMenu. Привязка кажется неправильной, я нахожу это в окне вывода:
System.Windows.Data Ошибка: 4: не удается найти источник для привязки со ссылкой «ElementName = listView». BindingExpression: Path = SelectedItem; DataItem = NULL; Целевым элементом является «MenuItem» (Name = ''); Целевым свойством является «Видимость» (тип «Видимость»)
Я не понимаю, в чём дело, и не смог разобраться с помощью поиска в Интернете.
Вот упрощенный код:
<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>
Большое спасибо!