2

在 Windows Phone 中,我使用 ObservableCollection 模型填充我的 Pivot 控件,该模型使用 LINQ 从 SQL 数据库中获取其数据。这在初始设置中非常有效。

但是当我对数据库做了一些更改,然后我想再次运行 LINQ 查询以反映对 UI(和 ObservableCollection)的更改时,我注意到 ObservableCollection 没有像我一样获得新值期望从 LINQ 查询。

private ObservableCollection<ComicItem> m_showingComicsListModel;
public ObservableCollection<ComicItem> ShowingComicsListModel
{
...
}

...

var comicsSelectedInDB = from ComicItem item in comicListDb.Items
                         where item.IsShowing == true
                         select item;

m_showingComicsListModel = new ObservableCollection<ComicItem>(comicsSelectedInDB );

因此,当showingComicsListModel第一次评估时,它会正确填充模型。但是在我对数据库进行了一些更改并第二次运行此代码之后,ShowingComicsListModel并没有改变,也没有调用 setter。

关于使用 LINQ 更新 ObservableCollection 的正确方法的任何提示?

4

1 回答 1

1

您有两种方法可以解决您的问题。

第一个选项是清除现有的 ObservableCollection 并将 linq 查询的结果添加到 Collection

var comicsSelectedInDB = from ComicItem item in comicListDb.Items
                     where item.IsShowing == true
                     select item;

m_showingComicsListModel.Clear();

foreach(var comic in comicsSelectedInDB) {
  m_showingComicsListModel.Add(comic);
}

或者

第二个选项是引发属性 ShowingComicsListModel 的 PropertyChangedEvent 以通知 UI 绑定属性已更改。此解决方案要求该类实现 INotifyPropertyChanged 接口。

private ObservableCollection<ComicItem> m_showingComicsListModel;
public ObservableCollection<ComicItem> ShowingComicsListModel
{
  get{ return m_showingComicsListModel;}
  set{
       m_showingComicsListModel = value;
       RaisePropertyChanged("ShowingComicsListModel");
  }
}
于 2012-05-07T12:16:00.543 回答