我有一个用户登录的应用程序,代表一个"生命周期"对象,直到用户注销。我正在使用MVVM Light,但不知道如何正确使用SimpleIoC(使用Messenger)。
目前,我将对象保存在MainViewModel中作为我的自定义CurrentUser
对象的User
属性,并通过构造函数将其传递给其他ViewModel,并将其另存为Property。但是我有这个问题,在某些地方,对象被覆盖/创建新的。
这可能是错误的做法,因为我发现SimpleIoC可以简单地用GetInstance<>()
返回已注册的实例,如果需要,还可以返回Key。
所以正确的方法是用Key创建一个User
对象来获取所需的类,修改并保存它以便其他类在调用时可以得到更新的值(或者PropertyChanged可能吗?),对吗?
我试图像这样创建它,但对象显然没有更新:
public MainViewModel()
{
RegisterMessenger();
CurrentUser = SimpleIoc.Default.GetInstance<User>("123");
_dataService = SimpleIoc.Default.GetInstance<IDataService>();
Messenger.Default.Send(new NotificationMessage("GoToLoginPage"));
}
public User CurrentUser
{
get { return _currentUser; }
set { Set(ref _currentUser, value); }
}
public User CurrentPageViewModel
{
get { return _currenPageViewModel; }
set { Set(ref _currentPageViewModel, value); }
}
public void RegisterMessenger()
{
Messenger.Default.Register<NotificationMessage>(this, message =>
{
switch (message.Notification)
{
case "GoToLoginPage":
if (_loginViewModel == null)
_loginViewModel = new LoginViewModel(_dataService);
CurrentPageViewModel = _loginViewModel;
break;
// Other cases...
});
}
}
// -------------------------------------------------------------------------
public LoginViewModel(IDataService dataService)
{
UserObj = SimpleIoc.Default.GetInstance<User>("123");
_dataService = dataService;
LoginCommand = new RelayCommand(LoginExecute, LoginCanExecute);
}
如果我用GetInstance<SomeViewModel>()
调用ViewModels,它会更好吗?但是,我如何将参数传递给它们并让它们保持 alive / recreate / destroy ?
如果有人能以正确的方式指出我,那就太好了,谢谢!