WPF привязка данных к свойству в том же элементе управления - PullRequest
0 голосов
/ 23 ноября 2010

В этом примере свойство IsEnabled моей кнопки привязано к выбранным строкам "Локальное" свойство сетки, и оно работает просто отлично:

        <Button DockPanel.Dock="Bottom" Width="100" Height="100" IsEnabled="{Binding ElementName=dataGridRestore , Path=SelectedItem.Local}"></Button>

        <my:DataGrid x:Name="dataGridRestore" 
                     ItemsSource="{Binding}" 
                     >

            <my:DataGrid.ContextMenu>
                <ContextMenu Name="restoreCntextMenu">
                    <MenuItem Header="Open" />
                </ContextMenu>
            </my:DataGrid.ContextMenu>

            <my:DataGridCheckBoxColumn Header="Local" Binding="{Binding Local}"  />
        </my:DataGrid>

Теперь, когда я перемещаю кнопку снаружи сеткивнутри контекстного меню сетки моя привязка не работает.Почему это и как я могу это исправить?

        <my:DataGrid x:Name="dataGridRestore" 
                     ItemsSource="{Binding}" 
                     >

            <my:DataGrid.ContextMenu>
                <ContextMenu Name="restoreCntextMenu">
                    <MenuItem Header="Open" />
                    <Button  Width="100" Height="100" IsEnabled="{Binding ElementName=dataGridRestore , Path=SelectedItem.Local}"></Button>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

            <my:DataGridCheckBoxColumn Header="Local" Binding="{Binding Local}"  />
        </my:DataGrid>

Ответы [ 2 ]

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

Используйте этот код:

<ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}">
    <Button IsEnabled="{Binding Local}"/>
</ContextMenu>

Я протестировал его с ContextMenu DataGridRows, и он работал нормально.

0 голосов
/ 23 ноября 2010

А как насчет использования атрибута RelativeSource вместо ElementName?

не может проверить это сейчас, но что-то вроде этого:

<Button  Width="100" Height="100" IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DataGrid}},Path=SelectedItem.Local}"></Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...