Синхронизировать выделение радиокнопок с выделением строк в сетке данных - PullRequest
1 голос
/ 06 февраля 2020

У меня есть RadioButtonTemplateColumn в моей сетке данных. При щелчке по радиокнопке выбирается соответствующая строка, но при щелчке по строке соответствующая радиокнопка не выбирается. Это оставляет систему в «запутанном» состоянии, поскольку радиокнопка и выбор строки не синхронизированы c. Пожалуйста, как мне их синхронизировать? Я рассмотрел аналогичный ответ, но он не решил проблему или меня.

Ниже приведен код, который я написал:

            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="Select" IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Width="Auto" Header="First Name" Binding="{Binding FirstName}"/>
                <DataGridTextColumn Width="Auto" Header="Last Name" Binding="{Binding LastName}"/>
            </DataGrid.Columns>
        </DataGrid>

1 Ответ

0 голосов
/ 06 февраля 2020

Проблема в том, что ваша привязка недействительна. Если вы используете такой инструмент, как Sn oop Wpf или живое визуальное дерево в Visual Studio, вы увидите, что привязка не работает.

Причина в том, что ваша RadioButton находится внутри шаблона, который имеет контекст данных, к которым привязана сетка, а не DataGridRow. Если вы обновите свою привязку следующим образом, она будет работать:

IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 

По сути, я сказал привязке искать IsSelected относительно DataGridRow выше в визуальном дереве.

Другая проблема заключается в том, что, поскольку вы используете RadioButton, его нельзя отменить при нажатии на него. Если вы хотите, чтобы он действовал как тумблер, вы должны использовать вместо него CheckBox.

Надеюсь, это поможет.

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