Я пытаюсь связать заголовок контекстного меню со свойством выбранного элемента соответствующего ListView
. Объекты ItemsSource
имеют свойство IsDuplicate
. Есть идеи, что не так?
<ListView x:Name = "AthletesListView" ItemsSource = "{Binding FoundAthletes}">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Name = "AddorEditAthleteMenuItem"
Header = "{Binding SelectedItem.IsDuplicate,
ElementName=AthletesListView,
Converter = {StaticResource FoundAthletesAddEditMenuItemConverter}}"
Click = "AddAthleteMenuItem_Click"/>
</ContextMenu>
</ListView.ContextMenu>
Под сообщением об ошибке:
Ошибка System.Windows.Data: 4: не удается найти источник для привязки со ссылкой 'ElementName=AthletesListView'. BindingExpression:Path=SelectedItem; Элемент данных = ноль; целевой элемент — «MenuItem» (Name = «AddorEditAthleteMenuItem»); целевое свойство — «Заголовок» (тип «Объект»)
ContextMenu
не является частью того же визуального дерева, что и связанный с ним ListView
, потому что он отображается в другом окне. Следовательно, относительные привязки имени источника и элемента не работают.
Вместо этого вы можете использовать PlacementTarget из ContextMenu
, который является ListView
.
<MenuItem Name = "AddorEditAthleteMenuItem"
Header = "{Binding PlacementTarget.SelectedItem.IsDuplicate, RelativeSource = {RelativeSource AncestorType = {x:Type ContextMenu}}, Converter = {StaticResource FoundAthletesAddEditMenuItemConverter}}"
Click = "AddAthleteMenuItem_Click"/>
Большое спасибо - завтра проверю, работает ли у меня. Действительно, я также пробовал относительный источник, который тоже не работал...