【发布时间】:2020-11-28 02:46:01
【问题描述】:
我有一个绑定到一个简单对象列表的 DataGrid 和一个 Checkbox,我想设置/取消设置列表中这些对象的 Selected 字段。
下面的代码不起作用。单击全选复选框会更改数据,但不会更新网格。 但是,如果我改变了
get => this._ordersToTransmit;
到
get => this._ordersToTransmit.ToList();
然后网格会更新并且可以正常工作。
谁能向我解释为什么我需要把ToList() 放在那里?也许我应该做一些完全不同的事情?
class ViewModel
{
private List<OrderListItem> _ordersToTransmit;
public List<OrderListItem> OrdersToTransmit
{
get => this._ordersToTransmit;
set => this.SetProperty(ref this._ordersToTransmit, value);
}
public bool SelectAll
{
get => this._selectAll;
set
{
this.SetProperty(ref this._selectAll, value);
foreach (OrderListItem item in this._ordersToTransmit)
item.Selected = value;
this.RaisePropertyChanged(nameof(TransmitOrdersViewModel.OrdersToTransmit));
}
}
}
<CheckBox Content="Select All" IsChecked="{Binding SelectAll, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGrid ItemsSource="{Binding OrdersToTransmit}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Selected}" />
</DataGrid.Columns>
</DataGrid>
【问题讨论】:
-
你在哪里设置
OrdersToTransmit属性?您是要仅更新现有项目的Selected列/属性,还是要尝试做什么? -
在构造函数中。这是一个项目的 DataGrid,在 DataGrid 上方有一个复选框,当它被选中时,所有项目都应该检查它们的 Selected 属性