繁体   English   中英

当数据更改时,Gridview不会更改

[英]Gridview doesn't change when data changes

我添加了一个可观察的数据,并将其绑定到我的数据网格,如下所示。

private ObservableCollection<Order> _allOrders;
public ObservableCollection<Order> AllOrders
{
  get { return _allOrders;}
  set { _allOrders = value; OnPropertyChanged(); }
}

public Presenter() { _allOrders = new ObservableCollection<Order>(...); }

public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] String propertyName = null)
{
  PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

当我在应该过滤数据的事件上设置断点时,将属性AllOrder设置为null 我可以使用手表对此进行验证。 但是,该视图未更新,因此我猜我忘记了一些东西。 当然,视图模型类Presenter实现了INotifyPropertyChanged接口。

缺少了什么?

编辑

网格的XAML代码如下所示。

<DataGrid x:Name="dataGrid" 
          ItemsSource="{Binding AllOrders}"
          AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn" ...>

假设您相应地设置了DataContext ,并且如果要在UI中过滤项目而不更改集合,则AllOrders绑定将在最初起作用,而将ListCollectionViewFilter一起使用则要容易得多。 WPF并不直接绑定到集合,而是绑定到视图-MSDN

private readonly ObservableCollection<Order> _allOrders;

private readonly ListCollectionView _filteredOrders;

public ICollectionView FilteredOrders 
{ 
    get { return _filteredOrders; } 
}

public Presenter() 
{ 
    _allOrders = new ObservableCollection<Order>(...);
    _filteredOrders = new ListCollectionView(_allOrders); 
    _filteredOrders.Filter = o => ((Order)o).Active;
}

在XAML中

<DataGrid ... ItemsSource="{Binding FilteredOrders}">

当您想手动刷新UI时,只需调用Refresh

_filteredOrders.Refresh();

除此之外,视图模型没有任何变化。 您仍然向_allItems添加/删除项目,并且UI应该自动选择更改

AllOrders仅在构造函数中设置属性AllOrders 如果是这样,则不要设置字段_allOrders而是设置属性AllOrders 如果设置该字段,则永远不会发出通知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM