Хорошо здесь: исходный xaml в вопросе, в ucPacketPrinting.xaml
<DataGridCheckBoxColumn
x:Name="clmPrint"
Binding="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Header="Print"
HeaderStyle="{StaticResource DataGridColumnHeaderStyle2}" IsReadOnly="True">
<DataGridCheckBoxColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsEditing" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridCheckBoxColumn.CellStyle>
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox">
<Setter Property="IsChecked" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridCheckBoxColumn.ElementStyle>
<DataGridCheckBoxColumn.EditingElementStyle>
<Style TargetType="CheckBox">
<Setter Property="IsChecked" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridCheckBoxColumn.EditingElementStyle>
</DataGridCheckBoxColumn>
Далее, вот свойство класса объекта vmPacketOrder. Я считаю, что столбец clmPrint привязан к этому
private bool isSelected = false;
…
public bool IsSelected
{
get => isSelected;
set {
Set(value, x => isSelected);
}
}
Наконец, вот рассматриваемый vmPacketPrinting. При этом используется коллекция объектов vmPacketOrder. rowCountSelected привязан к текстовому полю, в котором отображается количество выбранных строк. Я проработал некоторые другие части, осталось только обновить свойство rowCountSelected, когда установлен флажок в столбце. Я думаю, я мог бы заставить его проверять свойство isSelected для каждого элемента в коллекции по таймеру и обновлять его таким образом, но было бы намного лучше, если бы я мог просто иметь событие, которое обновляет его, когда флажок установлен или снят. Я пока не нашел способа сделать это на самом деле.
private ObservableCollection<vmPacketOrder> packetOrders;
…
public ObservableCollection<vmPacketOrder> PacketOrders
{
get {
return packetOrders;
}
set => Set(value ?? new ObservableCollection<vmPacketOrder>(), x => packetOrders);
}
…
public string rowCountSelected { get; set; } = "0";