コンストラクタが呼び出されたときに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
を実装すると、サービスが何らかの形で上書きされるということです。私は正しい名前を取得しているかどうかをチェックしていましたが、それは新しいインスタンスを生成するように見えますが、今度はサービスを再開することができます...可能ではありません...
あなたは本当に 'INavigationAware'を実装する必要がありますか?このように使用すると、明らかにViewModelがインスタンス化されます。私は、コンストラクタではなく他の関数でサービスを開始することをお勧めします。おそらく、親クラスの内部またはロードイベント中です。 – ViVi
私はそれを避けようとしていますが、それをやる方法をまだ見つけていません。私はいくつかの要素をdbコンテキストのプロパティまたは何かを観察することを考えていた... dbが変更されたときに更新する...しかし可能かどうかわからない – Norgul