在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的正确方法的任何提示吗?
答案 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");
}
}