【发布时间】:2015-01-17 17:06:17
【问题描述】:
我添加了一个可观察数据并将其绑定到我的数据网格,如下所示。
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" ...>
【问题讨论】:
-
ObservableCollection 不需要
PropertyChanged*。该集合已经对绑定进行了所有通知。请显示您的 XAML(的相关部分) -
@DrKoch 我使用by this blogger 跟随模式。也许这不是最佳方法。至于 XAML,在这种情况下哪个部分是相关的?我已经添加了我认为的内容。请查看编辑。
-
@KonradViltersten 我是否理解正确,最初您可以看到一些项目(绑定工作)但在某些时候您将
AllOrders设置为 null 并且项目不会消失?是的,如果您稍后设置该属性,则需要AllOrders中的PropertyChanged。ObservableCollection仅涵盖收集中的项目发生的情况。 -
@dkozl 你理解正确。而且由于我要来回过滤,我实际上更喜欢只显示属性 Active 更改为某物的项目,而不是分配整个属性 AllOrders i> 全部结束。
-
请向我们展示您将
AllOrders设置为null 的代码。给你带来问题的地方。
标签: c# wpf xaml gridview data-binding