Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Gridview没有';当数据改变时,数据不会改变_C#_Wpf_Xaml_Gridview_Data Binding - Fatal编程技术网

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();