2013-02-25 11 views
0

В WPF У меня есть следующая структура:WPF элемент Связывание с ContextMenu

UserControl>Grid>TabControl>DataGrid>ContextMenu

Я хотел бы иметь DataContext из моих ContextMenu такой же, как и для моего Grid. Это, как я в настоящее время пытается сделать это:

<ContextMenu Name="contextMenu" DataContext="{Binding ElementName=MainGrid, Path=DataContext}"> 

Но я получаю следующее сообщение об ошибке:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=MainGrid'. BindingExpression:Path=DataContext; DataItem=null; target element is 'ContextMenu' (Name='contextMenu'); target property is 'DataContext' (type 'Object') 

мне нужно сделать это таким образом, как DataContext из DataGrid отличается от " MainGrid ", а ContextMenu - в DataGrid.

Может ли кто-нибудь предложить мне руководство, поскольку, по моему мнению, это правильно?

ответ

0

Я чувствую, что это не требуется. Набор данных DataContext, установленный на родительском уровне, уже доступен для ребенка. Если вам нужно, вы можете переопределить. Но в вашем случае вы хотите использовать тот же Datacontext.

+0

Извините, что я не упомянул об этом, то 'DataContext' из' DataGrid' отличается от «MainGrid», и 'ContextMenu' находится в' DataGrid '. –

+0
+0

Нет, я пробовал это раньше, и ошибка остается! –

0

Как правило, вы привязываете свойство к определенному DataContext, а не самому DataContext к другому DataContext. Но в вашем случае, это должно помочь:

DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext}" 
+0

Я действительно пробовал это раньше, но ошибка остается прежней! –

+0

ОК, может быть, вы правы, но учтите, что описанная вами ошибка происходит из-за ElementName = «MainGrid». В верхнем выражении Binding не указывается Elementname и не указано «MainGrid». Таким образом, есть вероятность, что вы упускаете из виду, что привязка - это тип «Grid». Просто подсказка (-; – deafjeff

Смежные вопросы