Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 执行第二个LINQ查询时是否未更新ObservableCollection?_C#_Linq_Windows Phone 7 - Fatal编程技术网

C# 执行第二个LINQ查询时是否未更新ObservableCollection?

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

在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 );
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(通过调试器检查)。但这对我很有用:您直接设置字段,而不是使用属性设置器