0

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

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

4

2 回答 2

1

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

SQL Server 中的查询通知

如果您不使用 MSSQL,请告诉我,我将删除答案。

于 2012-11-10T14:06:39.203 回答
0

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

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

事实上,您会意识到在很多情况下(在我的情况下,这是 95% 的情况),您不想为您的 WPF 控件命名。如果您的代码不了解您的 UI,那么从长远来看,维护起来会更容易。让您的 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 实际上在您修改集合时提供了自己的更改。

于 2012-11-10T14:13:26.617 回答