在执行第二次LINQ查询时,ObservableCollection未更新?

时间:2012-05-07 12:03:12

标签: c# linq windows-phone-7

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

但是当我对DB做了一些更改然后我想再次运行LINQ查询以反映UI(和ObservableColletion)的更改时,我注意到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的正确方法的任何提示吗?

1 个答案:

答案 0 :(得分: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");
  }
}