我想在我正在使用Caliburn Micro的Windows應用商店應用程序中實現註銷功能。重置由Caliburn Micro創建的ViewModels
我遇到的挑戰是,如果用戶註銷,然後以另一個用戶身份再次登錄,則應用程序啓動時實例化的ViewModels仍然存在於內存中,並且對舊模型有引用。因此,視圖正在顯示第一個用戶的陳舊數據。
爲了更好地解釋自己:
public class LoginViewModel : Screen
{
private User _model;
// Property gets initialised only on instantiation of ViewModel class
public User Model
{
get { return _model; }
set
{
if (Equals(value, _model)) return;
_model = value;
NotifyOfPropertyChange(() => Model);
}
}
// ViewModel constructor - instantiated once only by Caliburn on startup
public LoginHeaderViewModel(IAuthService authService)
{
Model = _authService.User;
}
}
當我的應用程序首次發佈,卡利會自動實例LoginViewModel
並運行它的構造,進而獲取登錄的用戶的電流。在用戶註銷並且另一個用戶登錄後,LoginViewModel
在運行時不會再次實例化,因爲它已經存在。 Model
屬性不被重新評估,因此關聯的視圖不會被告知自行刷新。
我嘗試在註銷時重新創建Caliburn的WinRTContainer
,但應用程序開始表現得很有趣。我懷疑無論如何都要採取這種方法,所以並沒有太多注意。
'OnDeactivate'將允許我清除我擁有的任何模型。但是,我需要重置或重新初始化我的模型。我想這可以在'OnActivate'中完成 – Hady