簡體   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