Как я могу связать ContextMenu внутри DataTemplate с DataContext родительского ListBox - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть ContextMenu (из набора инструментов Silverlight) внутри DataTemplate, используемого в качестве ItemTemplate объекта ListBox:

<DataTemplate x:Key="BillItemDataTemplate">
  <Grid Margin="0,0,0,12" x:Name="ItemGrid">
    <kit:ContextMenuService.ContextMenu>
      <kit:ContextMenu>
        <kit:MenuItem Header="delete item" 
                      Command="{Binding ???????.DeleteItemCommand}"
                      CommandParameter="{Binding}" />
      </kit:ContextMenu>
    </kit:ContextMenuService.ContextMenu>
    [...]
  </Grid>
</DataTemplate>

Как я могу сказать ContextMenu.Command связываться со свойством на модели представления, представленной external DataContext (то есть тем, которое применяется к ListBox)? Если я прав, я не могу использовать относительные декларации WPF, как объяснено здесь .

Я бы предпочел, чтобы моим дочерним моделям представления не требовалась ссылка на "родительскую" модель представления.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Кстати, я привык иметь свойство ICommand в каждой дочерней модели представления, присваивая родительский ICommand при каждом создании, снова с помощью CommandParameter="{Binding}".

1 голос
/ 29 апреля 2011

Использование может использовать привязки ElementName. У меня нет кода здесь, но вы можете сделать что-то вроде

DataContext="{Binding ElementName=LayoutRoot,Path=DataContext}"

Где LayoutRoot - это элемент вне ListBox или самого ListBox.

...