Как установить привязку в контекстном меню CommandMarau DataGrid Datagrid - PullRequest
4 голосов
/ 17 мая 2010

Мне нужно создать ContextMenu, где я хочу передать текущий выбранный индекс сетки данных в ViewModel, используя CommandParameter. Следующий код Xaml не работает. В чем может быть проблема?

<dg:DataGrid ItemsSource="{Binding MarketsRows}"
    <dg:DataGrid.ContextMenu >
        <ContextMenu >
            <MenuItem Header="Add Divider"
                  CommandParameter="{Binding Path=SelectedIndex,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dg:DataGrid}}}"
                  Command="{Binding Path= AddDividerCommand}"/>
        </ContextMenu>
    </dg:DataGrid.ContextMenu>
</dg:DataGrid>

Ответы [ 2 ]

12 голосов
/ 17 мая 2010

Контекстное меню не является частью одного и того же визуального дерева. Привязки предков не работают, поскольку контекстное меню не является потомком элемента, к которому оно относится; в вашем случае датагрид.

Есть несколько обходных путей, я уже отвечал на этот вопрос ранее здесь и здесь (вроде)

Но вы ищете цель размещения, чтобы сделать что-то подобное (если AddDividerCommand является свойством в сетке данных (т.е. целью размещения)

<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self}, Path=PlacementTarget}">
 <MenuItem
    Header="Add Divider"
    CommandParameter="{Binding Path=SelectedIndex}"
    Command="{Binding Path=AddDividerCommand}"/>
</ContextMenu>
3 голосов
/ 29 ноября 2013

Попробуйте что-то подобное в вашем CommandParameter,

<DataGrid.ContextMenu>
     <ContextMenu>
           <MenuItem Header="MyHeader" 
                     Command="{Binding MyCommand}"
                     CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.SelectedItem}" />
</DataGrid.ContextMenu>

Я уже проверил это, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...