Привязка данных WPF с RelativeSource и AncestorType - PullRequest
3 голосов
/ 24 ноября 2010

Я пытаюсь заставить работать некоторый код привязки.По сути, я хочу связать свойство IsEnabled элемента контекстного меню моей сетки со значением выбранной строки в сетке.

У меня это работает с этим:

            <my:DataGrid.ContextMenu>
                <ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}"> 
                    <MenuItem Header="Grant Access" IsEnabled="{Binding Connectable}"/>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

Но я хочу сделать это так, и это не работает.Это не ошибка, но просто не отключает пункт меню.Есть идеи почему?

            <my:DataGrid.ContextMenu>
                <ContextMenu> 
                    <MenuItem Header="Grant Access" IsEnabled="{Binding Path=SelectedItem.Connectable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type my:DataGrid}}}"/>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Попробуйте использовать ElementName binding вместо Ancestor binding. ContextMenu не является частью визуального дерева Grid.

- изменить -

Ах, я был не прав. Привязка ElementName (пример приведен ниже) также не будет работать с ContextMenu. Он не является частью визуального дерева DataGrid. Вот почему он не может видеть эту DataGrid и, следовательно, не может ссылаться на нее. Вы должны будете сделать это, используя первый метод.

Любая причина, почему вы не хотите делать это таким образом?

            <DataGrid.ContextMenu>
                <ContextMenu DataContext="{Binding SelectedItem, ElementName=DataGrid1}">
                    <MenuItem Header="Grant Access"
                              IsEnabled="{Binding Connectable}" />
                </ContextMenu>
            </DataGrid.ContextMenu>
0 голосов
/ 24 ноября 2010

Если вы посмотрите на окно вывода в Visual Studio в режиме отладки, вы получите подробную информацию об ошибке привязки, которая может пролить свет на вашу проблему.

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