2

Windows Phone では、LINQ を使用して SQL データベースからデータを取得する ObservableCollection モデルをピボット コントロールに設定します。これは、初期設定で非常にうまく機能します。

しかし、DB にいくつかの変更を加えた後、UI (および ObservableColletion) への変更を反映するために LINQ クエリを再度実行したい場合、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ため、 が初めて評価されるときに、モデルに適切に入力されます。しかし、DB にいくつかの変更を加えてこのコードをもう一度実行した後、ShowingComicsListModelは変更されておらず、setter は呼び出されません。

ObservableCollection を LINQ で更新する適切な方法についてのヒントはありますか?

4

1 に答える 1

1

問題を解決するには2つの方法があります。

最初のオプションは、既存の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);
}

また

2番目のオプションは、プロパティSh​​owingComicsListModelの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 に答える