C# 执行第二个LINQ查询时是否未更新ObservableCollection?
在Windows Phone中,我使用ObservableCollection模型填充Pivot控件,该模型使用LINQ从SQL数据库获取数据。这在初始设置中非常有效 但是,当我对数据库做了一些更改,然后我想再次运行LINQ查询以反映对UI(和ObservableCollection)的更改时,我注意到ObservableCollection没有像我期望的那样从LINQ查询中获得新值C# 执行第二个LINQ查询时是否未更新ObservableCollection?,c#,linq,windows-phone-7,C#,Linq,Windows Phone 7,在Windows Phone中,我使用ObservableCollection模型填充Pivot控件,该模型使用LINQ从SQL数据库获取数据。这在初始设置中非常有效 但是,当我对数据库做了一些更改,然后我想再次运行LINQ查询以反映对UI(和ObservableCollection)的更改时,我注意到ObservableCollection没有像我期望的那样从LINQ查询中获得新值 private ObservableCollection<ComicItem> m_showingC
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 );
private observeCollection m_showing ComicsListModel;
公共可观测集合显示ComicListModel
{
...
}
...
var comicsSelectedInDB=来自comicListDb.Items中的ComicItem项
其中item.IsShowing==true
选择项目;
m_showingComicsListModel=新的ObservableCollection(comicsSelectedInDB);
因此,当第一次计算ShowingComicListModel
时,它会正确地填充模型。但是在我对DB做了一些更改并再次运行此代码之后,showingComicListModel
没有更改,也没有调用setter
关于使用LINQ更新ObservableCollection的正确方法的任何提示?您有两种方法来解决问题 第一个选项是清除现有的ObservableCollection,并将linq查询的结果添加到集合中
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);
}
或
第二个选项是提升属性ShowingComicListModel的PropertyChangedEvent,以通知UI绑定的属性已更改。此解决方案要求类实现INotifyPropertyChanged接口
private ObservableCollection<ComicItem> m_showingComicsListModel;
public ObservableCollection<ComicItem> ShowingComicsListModel
{
get{ return m_showingComicsListModel;}
set{
m_showingComicsListModel = value;
RaisePropertyChanged("ShowingComicsListModel");
}
}
private observeCollection m_showing ComicsListModel;
公共可观测集合显示ComicListModel
{
获取{return m_showingComicsListModel;}
设置{
m_showingComicsListModel=值;
RaisePropertyChanged(“ShowingComicListModel”);
}
}
非常好,谢谢!实际上我已经做了你的第一个建议,但是在重新填充模型时注意到了一个显著的滞后。你的第二个建议不仅有效,而且没有滞后!谢谢:)事实上,一条评论;您的后一个代码示例对我不起作用。我必须在执行LINQ查询的方法中显式调用RaisePropertyChanged
,并设置值-在这种情况下,从未为我调用setter(通过调试器检查)。但这对我很有用:您直接设置字段,而不是使用属性设置器