2012-05-07 12 views
2

Windows PhoneでピボットコントロールにObservableCollectionモデルを実装し、LINQを使用してSQLデータベースからデータを取得します。これは最初の設定でうまく動作します。2番目のLINQクエリを実行すると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は変更されておらず、セッターは呼び出されません。

ObservableCollectionをLINQで更新する正しい方法は何ですか?

答えて

1

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

最初のオプションでは、既存のObservableCollectionをクリアし

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); 
} 

または

番目のオプションは、UIを通知するプロパティSh​​owingComicsListModelためPropertyChangedEventを高めることであるコレクションにLINQクエリの結果を追加することですバウンドプロパティが変更されたことを示します。この解決策では、クラスがINotifyPropertyChangedインタフェースを実装する必要があります。

private ObservableCollection<ComicItem> m_showingComicsListModel; 
public ObservableCollection<ComicItem> ShowingComicsListModel 
{ 
    get{ return m_showingComicsListModel;} 
    set{ 
     m_showingComicsListModel = value; 
     RaisePropertyChanged("ShowingComicsListModel"); 
    } 
} 
+0

非常に良い、ありがとう!私は実際にあなたの最初の提案をしましたが、モデルが再投入されているときに大きな遅れがあることに気付きました。あなたの2番目の提案では、それだけでは動作しませんが、遅れはありません!ありがとう:) –

+0

実際には、1つのコメント;後者のコード例は私のためには機能しませんでした。私は明示的に 'RaisePropertyChanged'をLINQクエリを実行し、値を設定するメソッドの中で呼び出さなければなりませんでした。この場合、setterは決して呼び出されませんでした(デバッガでチェックされました)。しかし、これは私のために働いた:[リンク](https://github.com/kypeli/WPDailyComic/blob/master/ComicBrowser/ViewModels/ComicListModel.cs#L76) –

+0

あなたはフィールドを直接設定し、プロパティセッターを使わない – Jehof

関連する問題