ตกลงที่นี่: แหล่งที่มา 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";