我有多个模块(每个模块都有自己的项目),我尝试在每个模块之间共享一个对象。
该对象已在UserViewModel模块上初始化,但未在其他模块上初始化(仅在属性更改触发器之后)。我用EventAggregator尝试过,但退出不正确。我在这里错过了一些非常重要的事情。
public UserClass User
{
get { return _user; }
set { SetProperty(ref _user, value);}
}
First Module
public UserViewModel(IEventAggregator userEventAggregator,
UnityContainer container)
{
_userEventAggregator= userEventAggregator;
_userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
User.PropertyChanged += UserOnPropertyChanged;
}
private void UserOnPropertyChanged(object sender,
PropertyChangedEventArgs e)
{
_userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
}
Second Module
public UserDetailsViewModel(IEventAggregator userEventAggregator,
IUnityContainer container)
{
_userEventAggregator= userEventAggregator;
_userEventAggregator.GetEvent<UserSentEvent>).Subscribe(UserUpdate);
}
答案 0 :(得分:0)
已初始化UserViewModel中的用户对象,但未初始化UserDetailsViewModel中的用户对象(它创建了自己的对象)
这是错误的处理方式,不是视图模型创建模型,而是视图模型是从模型创建的。您需要从两个视图模型访问的共享服务,并且该服务将管理模型。
示例:
internal class SimpleInMemoryUserRepository : IUserRepository
{
public User GetTheUser()
{
return _user;
}
public void DeleteTheUser()
{
_user = null;
}
public void CreateNewUser()
{
_user = new User();
}
private User _user;
}
在您的初始化代码中:
container.RegisterSingleton<IUserRepository, SimpleInMemoryUserRepository>();