首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF XAML DataGrid和SelectAll

WPF XAML DataGrid和SelectAll
EN

Stack Overflow用户
提问于 2020-08-08 02:20:45
回答 1查看 49关注 0票数 0

我有一个绑定到简单对象列表的DataGrid和一个想要设置/取消设置列表中这些对象的选定字段的Checkbox

下面的代码不起作用。单击全选复选框可更改数据,但不会更新网格。但是,如果我改变了

代码语言:javascript
复制
get => this._ordersToTransmit; 

代码语言:javascript
复制
get => this._ordersToTransmit.ToList(); 

然后更新网格,它将正常工作。

有人能解释一下为什么我需要把ToList()放在那里吗?也许我应该做一些完全不同的事情?

代码语言:javascript
复制
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));
        }
    }
}
代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2020-08-08 02:59:57

您为列表引发了NotifyPropertyChanged,但是列表实际上并没有改变:列表中的项正在改变。

您可以:

  • 为列表中的每一项引发NotifyPropertyChanged。
  • 替换整个列表,这就是调用ToList()时所做的事情:动态创建一个新的列表对象。
  • 强制刷新您的DataGrid:请参见
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63307285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档