В WPF, как привязать к командам в модель представления предка
Мой английский плох, так что я не знаю, смогу ли я объяснить это ясно, извините за это.
И я действительно не знаю, как это объяснить, когда пытаюсь провести какое-то исследование.
В настоящее время у меня есть страница, которая является UserConstrol называется "ToolPathPage", и он содержит другой элемент управления UserControl называется "ToolPathDataControl", который не содержит ничего, кроме элементе управления DataGrid.
Теперь я хочу привязать команду в ToolPathPageViewModel к элементу меню в ToolPathDataControl.xaml.
Что я уже пробовал:
<DataGrid.ContextMenu> <ContextMenu > <MenuItem Header="Clear" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:ToolPathPage},AncestorLevel= 1}, Path=DataContext.(viewModel:ToolPathPageViewModel.Clear_AllCommand)}"/> </ContextMenu> </DataGrid.ContextMenu>
В окне вывода он говорит::
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='mTracker.ToolPathPage', AncestorLevel='1''. BindingExpression:Path=DataContext.(0); DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
Graeme_Grant
"BindingExpression:Path=DataContext.(0); DataItem=null;" - не удается найти искомый DataContext...
Jwls
Спасибо за ответ, но я действительно установил DataContext страницы Toolpath в ToolPathPageViewModel.
И означает ли это, что страница ToolPathPage успешно найдена в качестве предка?
Graeme_Grant
Вы можете использовать инспектор XAML в VS2017 для проверки ;)
Richard Deeming
Контекстное меню не является частью визуального дерева, поэтому привязка "найти предка" не будет работать.
Возможно, вы сможете найти обходной путь, основанный на этой статье:
WPF: ContextMenu снова наносит удар. DataContext Не Обновляется[^]
Jwls
Это работает, большое спасибо!