C# Gridview没有';当数据改变时,数据不会改变
我添加了一个可观察的数据,并将其绑定到我的数据网格中,如下所示C# Gridview没有';当数据改变时,数据不会改变,c#,wpf,xaml,gridview,data-binding,C#,Wpf,Xaml,Gridview,Data Binding,我添加了一个可观察的数据,并将其绑定到我的数据网格中,如下所示 private ObservableCollection<Order> _allOrders; public ObservableCollection<Order> AllOrders { get { return _allOrders;} set { _allOrders = value; OnPropertyChanged(); } } public Presenter() { _allOrde
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));
}
<DataGrid x:Name="dataGrid"
ItemsSource="{Binding AllOrders}"
AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn" ...>
private observateCollection\u allOrders;
公共可观测集合AllOrders
{
获取{return\u allOrders;}
设置{u allOrders=value;OnPropertyChanged();}
}
公共演示者(){u allOrders=newobserveCollection(…);}
公共事件属性更改事件处理程序属性更改;
[NotifyPropertyChangedInvocator]
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
当我在应该过滤数据的事件上设置断点时,我将属性AllOrder设置为null。我可以用手表来确认它已经调好了。但是,视图没有更新,所以我猜我忘了什么。当然,视图模型类Presenter实现了INotifyPropertyChanged接口
少了什么
编辑
网格的XAML代码如下所示
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));
}
<DataGrid x:Name="dataGrid"
ItemsSource="{Binding AllOrders}"
AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn" ...>
是否仅在构造函数中设置属性AllOrders
?如果是,则不要设置字段\u allOrders
,而是设置属性allOrders
。如果您设置了字段,则不会发出通知。假设您相应地设置了DataContext
,并且AllOrders
绑定最初起作用,如果您希望在UI中过滤项目,而不更改集合,则与。WPF不直接绑定到集合,而是绑定到视图-
除此之外,视图模型中没有任何更改。您仍然可以将项目添加/删除到
\u allItems
,并且更改应该由UI自动拾取您不需要属性更改*
进行可观察的收集。集合已对绑定执行所有通知。请出示你的护照(相关部分)XAML@DrKoch我用手指跟着拍子。也许这不是最佳的方法。至于XAML,在本例中哪个部分是相关的?我已经添加了我认为是的内容。请查看编辑。@KonradViltersten我是否正确理解最初您可以看到一些项目(绑定工作),但在某些时候您将AllOrders
设置为null,并且项目不会消失?是的,如果以后设置属性,则需要在AllOrders
中更改PropertyChanged
ObservableCollection
仅涵盖集合中的项目发生的情况。@dkozl您理解正确。由于我要来回过滤,实际上我更喜欢只显示属性活动更改为某个内容的项,而不是分配整个属性的AllOrders。请向我们显示将AllOrders
设置为null的代码。导致您出现问题的点。我正在构造函数中设置private\u allorder。然后,在选中复选框时,我将分配给公共allorder。那么,应该提出通知。太好了+½表示灵活的替代建议,½表示回复中的nice代码示例,包括链接。
_filteredOrders.Refresh();