2017-05-31 11 views
0

私はSQLiteでUWPアプリケーションを開発していますが、問題に直面しています。 ユーザーがそれらを確認することができます -別のサイト/更新ボタンでObservableCollectionを更新する

私はstring FavMoviesIdString(あなたがMoviesModelsの全リストを保存することはできませんので、すべての好きな映画のID";"によって文字列に追加し、分割されている)としての私のDBに保存されている作品のコレクションを持っています別のサイト(サイトB)上のFavMoviesCollection経由のムービー。

方法LoadMoviesは、これらの映画を取得し、FilteredMoviesListに表示します。ユーザーがサイトB初めて開いた場合、LoadMoviesメソッドがコンストラクタで呼び出されると、すべての作品が表示され、しかし

(これは、リストビューMode=OneWayに結合する)、ユーザーから自分のお気に入りに作品を追加することができますサイトBを訪問した後のサイトA。問題:サイトAにムービーが追加された後、リストは更新されません。

アプリケーションを開く - >サイトAに移動してお気に入りにムービーを追加 - >サイトBに移動 - ムービーが表示されます - >移動サイトAに戻り、別のムービーを追加する - >サイトBに戻り、最初のムービーだけが表示されます。

「私がしなければならない何という別の項目が追加された場合は、リストの更新」またはは、「私は私のコンストラクタを再初期化するために何ができます?」または「手動でムービーを読み込むために更新ボタンを実装する必要がありますか?」

public ObservableCollection <MovieModels> FilteredMoviesList 
    { 
     get { return _filteredMoviesList;} 
     set 
     { 
      _filteredMoviesList = value; 
      RaisePropertyChanged("FilteredMoviesList") 
     } 
    } 

    public void LoadMovies() 
    { 
     using(var db = new DataBaseContext()) 
     { 
      ObservableCollection<MovieModel> movies = new ObservableCollection<MovieModel>(); 
      movies = DatabaseModel.GetSampleFavMovies(); 
      FilteredMoviesList = movies; 
     } 
    } 

EDIT:何が今作品:

別のページに移動するには、私はLoadMoviesメソッドを呼び出す - これだけのリストが更新され、それが悪いのサイトを離れた後。

答えて

1

あなたのケースは、MVVMでメッセージングを使用する良い例です。

ユーザーがサイトAからお気に入りにムービーを追加するときは、メッセージを送信する必要があります。 Bはこのメッセージに登録し、それ自身の処置を行うべきです。

メッセージの使用パブリッシュ/サブスクライブパターンを使用できます。これを行うには、実装する必要はありません。 isを実装するいくつかのMVVMライブラリを使用できます。あなたはMVVMライトを使用することができる。例えば

ViewModelBaseからあなたのViewModelを継承し、あなたがメッセージを送信し、登録するために使用できるMessengerInstanceを持っています。

AViewModelであなたのコード(ユーザーが自分のお気に入りに作品を追加した場合):

MessengerInstance.Send(new FavouritesListChangedNotification()); 

(consturctor中)BViewModelであなたのコード:

MessengerInstance.Register<FavouritesListChangedNotification>(this, scn => {/* here imlement you action when in site A the list of favorites changed*/}); 

FavouritesListChangedNotificationが他方を含めることができる独自のクラスです情報、例えば映画のリスト。

このようにして、ViewModel間の直接参照を避けることで、緩やかに結合されたViewModelが生成され、より簡単にメンテナンス可能なクライアントコードが生成されます。

+0

ありがとうございました!これはまさに探していたことです! –

関連する問題