【发布时间】:2021-01-07 18:40:19
【问题描述】:
这里好:有问题的源 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";
【问题讨论】:
标签: c# wpf object properties binding