Как вы уже знаете, этот флажок является потомком пользовательского элемента управления, размещенного в строке сетки данных.
Таким образом, вам придется разрешить эти 2 уровня границ, используя свойство-посредник * 1003.* держать CheckBox.IsChecked
.Вы можете ввести новое свойство зависимостей в myCheckboxControl
скажем IsCheckBoxChecked
использование, которое в дальнейшем обсуждении.
Я использую другое свойство под названием Tag
, которое является заполнителем для любой дополнительной информации, которую можно добавитьк элементу фреймворка.
<UserControl x:Class="UserControls.myCheckboxControl">
<Grid>
<CheckBox x:Name="chkboxList"
HorizontalAlignment="Center"
IsChecked="{Binding
Tag,
RelativeSource={RelativeSource
AncestorType={x:Type UserControl}}
Mode=TwoWay}">
</Grid>
</UserControl>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<localControls:myCheckboxControl
Tag="{Binding
IsSelected,
Mode=TwoWay,
RelativeSource={RelativeSource
AncestorType={x:Type DataGridRow}}}"
x:Name="controlList"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
Таким образом, когда вы программно выбираете строку (и) сетки данных, тогда будет установлен соответствующий флажок в этой строке.Кроме того, когда вы устанавливаете флажок, строка будет выделена, и наоборот.
Теперь, если вы не хотите, чтобы выбор выполнялся после установки флажка, вам нужно будет ввести свойство, основанное на уведомлении INotifyPropertyChanged
.на уровне элемента строки.
Например, если вы связываете список сотрудников с сеткой данных, то каждый класс сотрудников должен иметь настраиваемое свойство с именем «IsSelected».Этот класс должен реализовывать интерфейс INotifyPropertyChanged
и вызывать уведомление об изменении свойства от установщика о том, что свойство IsSelected
.
В этом случае привязка изменяется на этот ...
<localControls:myCheckboxControl
Tag="{Binding
IsSelected,
Mode=TwoWay}"
x:Name="controlList"/>
Дайте мне знать, если это поможет.