项目属性更改后刷新DataGrid



我的模型类是由实体框架从数据库自动生成的,所以它们不能实现INotifyPropertyChanged。在XAML:

<DataGrid ItemsSource={Binding CollectionView}/>

和作为DataContext的类:

public ICollectionView CollectionView { get; set; }
private DbSet _data;

及其构造函数:

_data.Load();
CollectionView = CollectionViewSource.GetDefaultView(_data.Local);

应用程序的另一部分进行数据库更新,这将更改实体实例的一个属性。之后我调用

_data.Load();
CollectionView.Refresh();

但是更新没有出现在DataGrid中。我该怎么做?

对我来说奇怪的是,我可以使数据库插入出现_data.Load(),所以我得到的印象是这个调用完全从数据库重建Local集合。

您必须编写ViewModel包装器来实现本文中描述的INotifyPropertyChanged

您可以使集合每次都得到'反弹'。不过,正如Nitin Joshi所提到的,它可能很昂贵。

类似:xaml:

<DataGrid ItemsSource={Binding CollectionView, UpdateSourceTrigger="PropertyChanged"}/>
代码:

private DbSet _data;
ICollectionView _collectionView;
public ICollectionView CollectionView 
{
    get { return _collectionView; }
    set
    {
        _collectionView = value;
        RaisePropertyChanged("CollectionView");
    }   
}

,而不是调用Refresh(),你可以简单地'重新绑定' CollectionView与新的数据集。

private void Update()
{
    _data.Load();
    CollectionView = null; // this will force a re-bind
    CollectionView = CollectionViewSource.GetDefaultView(_data.Local);  
}

问题在于修改数据库的视图和显示数据的视图使用了同一个DbContext类的两个不同实例;

最新更新