如何让WPF DataGrid显示最新内容?

时间:2012-11-10 13:40:11

标签: wpf database binding datagrid

现在我有一个WPF DataGrid,它显示从LINQ to Entity查询获得的列表。但这并不意味着如果我从我的数据库中删除某些内容,它将立即从DataGrid中删除。我尝试了myGrid.Items.Refresh(),但它只刷新了一个单元格。

我知道ObservableCollection可以某种方式解决问题,但我不知道在哪里创建这样的集合和正确的方法,这样每当我创建/添加/修改数据库时,集合也会被修改。

2 个答案:

答案 0 :(得分:1)

DataGrid包含查询运行时的数据 如果您需要新数据,则需要重新运行查询。

Query Notifications in SQL Server

如果你没有使用MSSQL,请告诉我,我会删除答案。

答案 1 :(得分:0)

您不需要通过代码与DataGrid进行交互。相反,将DataGrid的ItemsSource绑定到ObservableCollection并操纵集合。 DataGrid将自动更新。

看看这里:Bind ObservableCollection to a DataGrid after assigning new value

事实上,你会意识到在很多情况下(在我的情况下,95%的情况下),你不想给你的WPF控件赋予任何名字。如果您的代码不了解您的用户界面,从长远来看,它更容易维护。让您的UI知道通过数据绑定获取其信息的位置。并查看INotifyPropertyChanged或Dependency Properties以及DataContext。

<DataGrid ItemsSource="{Binding MyCollection}" />


public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    ObservableCollection<object> myCollection = new ObservableCollection<object>();
    public ObservableCollection<object> MyCollection
    {
    get
    {
        return myCollection;
    }
    set
    {
        myCollection = value;
        // Call the Notification here. Using linq and reflection you could get it to look like this:
        // NotifyPropertyChanged(() => MyCollection);
    }
}

如果您实际上没有更改myCollection值,则不需要提供更改通知。修改集合时,ObservableCollection实际上提供了自己的更改。