我有一個儀表板,它在調用構造函數時從數據庫中提取數據並相應地更新listbox
。一旦我導航到新選項卡以將元素添加到數據庫並導航回儀表板,視圖不會更新。我定義了ObservableCollection
,如果我例如從儀表板視圖內的列表中刪除元素,它的功能就很好。WPF Prism C#觀察數據庫更改並更新
由於我使用Prism
,我已經實現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
嗯,我試圖避免它,但還沒有找到辦法做到這一點。我正在考慮做一些元素觀察數據庫的上下文屬性或什麼...更新數據庫時更改...但不知道它是否可能 – Norgul