2016-11-28 7 views
0

コンストラクタが呼び出されたときにDBからデータをフェッチし、それに応じてlistboxを更新するダッシュボードがあります。新しいタブに移動して要素をDBに追加し、ダッシュボードに戻ると、ビューは更新されません。私はObservableCollectionを定義しています。たとえば、ダッシュボードビュー内のリストから要素を削除するとうまく機能します。WPF Prism C#はDBの変更と更新を観察します

ダッシュボードにを使用していますので、ダッシュボードにINavigationAwareを実装しました。この方法で両方の方法(削除と新規追加)で動作しますが、問題は、私がビューに戻ると、ViewModelクラス全体が再びインスタンス化されるので、そのままにしておいてください。ここで

はコンストラクタです:サービスが開始しているかのモードを停止した場合

public DashboardViewModel() 
{ 
    service = new Service.ServiceManager(); 
    controller = ServiceController.GetServices().FirstOrDefault(x => x.ServiceName == service.ServiceName); 
    lbPlugins = new ObservableCollection<Plugin>(); 
    lbPlugins.AddRange(new DbRepository().GetContext().PluginSet); 
    StartStopInit(); 
} 

プログラムを介して勝利サービスをインストールすることが可能である、とダッシュボードのチェック:

private void StartStopService() 
{ 
    if (startStopTxt == "Start") 
    { 
     service.StartService(); 
    } 
    else 
    { 
     service.StopService(); 
    } 
} 

問題私がINavigationAwareを実装すると、サービスが何らかの形で上書きされるということです。私は正しい名前を取得しているかどうかをチェックしていましたが、それは新しいインスタンスを生成するように見えますが、今度はサービスを再開することができます...可能ではありません...

+0

あなたは本当に 'INavigationAware'を実装する必要がありますか?このように使用すると、明らかにViewModelがインスタンス化されます。私は、コンストラクタではなく他の関数でサービスを開始することをお勧めします。おそらく、親クラスの内部またはロードイベント中です。 – ViVi

+0

私はそれを避けようとしていますが、それをやる方法をまだ見つけていません。私はいくつかの要素をdbコンテキストのプロパティまたは何かを観察することを考えていた... dbが変更されたときに更新する...しかし可能かどうかわからない – Norgul

答えて

1

サービスマネージャーには何も表示されません。それをシングルトンとして単一性で登録し、それを依存性として注入させます:

+0

@Haukingerと合意、複数のビューそれをサービスに保持し、サービスをViewModelsに挿入するかどうかに依存します。それ以外の場合は、OnNavigatingToとOnNavigatingFromを一貫して保持してロードすることは、コードに依存します。あなたがViewをある地域に移動している場合、Prism RegionManagerがそのRegionへの参照を保持しているため、View内のLoadedイベントやViewModelの新しく構築されたイベントを取得しないことに気づいていないことがよくありますあなたが離れてナビゲートすると、INavigationAwareの方法がそれになります。 –

関連する問題