C# 如何在两个窗口之间发送数据,以便使用MVVM和autofac登录?
我正在编写我的第一个“真正的”MVVM应用程序,用户需要采取的第一步是提供登录凭据。我希望当用户输入用户名和密码时,会打开一个新窗口,其中包含用户的id和名称。因此,我有一个主视图模型和用户视图模型,并且我使用autofac进行依赖项注入,下面是我的代码 视图模型代码:C# 如何在两个窗口之间发送数据,以便使用MVVM和autofac登录?,c#,wpf,mvvm,prism,autofac,C#,Wpf,Mvvm,Prism,Autofac,我正在编写我的第一个“真正的”MVVM应用程序,用户需要采取的第一步是提供登录凭据。我希望当用户输入用户名和密码时,会打开一个新窗口,其中包含用户的id和名称。因此,我有一个主视图模型和用户视图模型,并且我使用autofac进行依赖项注入,下面是我的代码 视图模型代码: public IEventAggregator _eventaggregator; private Func<IUserAccountViewModel> _useraccountviewmodelCre
public IEventAggregator _eventaggregator;
private Func<IUserAccountViewModel> _useraccountviewmodelCreator;
private IUserAccountViewModel _useraccountViewModel;
public MainViewModel(INavigationViewModel navigationveiwmodel ,
Func<IUserAccountViewModel> useraccountviewmodelCreator,IEventAggregator EventAggregator)
{
_useraccountviewmodelCreator = useraccountviewmodelCreator;
_eventaggregator = EventAggregator;
_eventaggregator.GetEvent<OpenDetailViewEvent>()
.Subscribe(OnOpenDetailView);
_eventaggregator.GetEvent<AfterUserSavedEvent>()
.Subscribe(AfterUserSaved);
NavigationViewModel = navigationveiwmodel;
CreateNewUserCommand = new DelegateCommand(OnCreateNewUserExecute);
LogInCommand = new DelegateCommand(onLoginExecute);
_eventaggregator.GetEvent<OpenDetailViewEvent>().Subscribe(AfterLoginExecute);
}
private async void onLoginExecute()
{
UserAccountViewModel = _useraccountviewmodelCreator();
await UserAccountViewModel.LoadAsyncByPassword(UserName, HashSomeText(Password));
}
private async void AfterLoginExecute(int? Userid)
{
UserAccountViewModel = _useraccountviewmodelCreator();
await UserAccountViewModel.LoadAsync(Userid);
CheckID = Userid.Value;
}
public INavigationViewModel NavigationViewModel { get; set; }
public ICommand CreateNewUserCommand { get; set; }
public ICommand LogInCommand { get; set; }
public IUserAccountViewModel UserAccountViewModel
{
get { return _useraccountViewModel; }
set
{
_useraccountViewModel = value;
OnPropertyChanged();
}
}
公共事件聚合器;
私有函数\u用户帐户ViewModelCreator;
私有IUserAccountViewModel _useraccountViewModel;
公共主视图模型(INavigationViewModel navigationveiwmodel,
Func useraccountviewmodelCreator,IEventAggregator事件聚合器)
{
_useraccountviewmodelCreator=useraccountviewmodelCreator;
_eventaggregator=eventaggregator;
_eventaggregator.GetEvent()
.订阅(OnOpenDetailView);
_eventaggregator.GetEvent()
.订阅(用户保存后);
NavigationViewModel=navigationveiwmodel;
CreateNewUserCommand=new DelegateCommand(OnCreateNewUserExecute);
LogInCommand=newdelegatecommand(onLoginExecute);
_eventaggregator.GetEvent().Subscribe(AfterLoginExecute);
}
私有异步void onLoginExecute()
{
UserAccountViewModel=\u useraccountviewmodelCreator();
等待UserAccountViewModel.LoadAsyncByPassword(用户名、HashSomeText(密码));
}
私有异步void AfterLoginExecute(int?Userid)
{
UserAccountViewModel=\u useraccountviewmodelCreator();
等待UserAccountViewModel.LoadAsync(Userid);
CheckID=Userid.Value;
}
public INavigationViewModel导航ViewModel{get;set;}
公共ICommand CreateNewUserCommand{get;set;}
公共ICommand登录命令{get;set;}
公共IUserAccountViewModel用户帐户ViewModel
{
获取{return\u useraccountViewModel;}
设置
{
_useraccountViewModel=值;
OnPropertyChanged();
}
}
这是我的用户视图模型
public async Task LoadAsyncByPassword(string UserName, string password)
{
var user = await _userRepository.GetAsyncByPassword(UserName, password);
if(user!=null)
{
_eventaggregator.GetEvent<OpenDetailViewEvent>().Publish(user.Id);
}
}
public async Task LoadAsyncByPassword(字符串用户名、字符串密码)
{
var user=await\u userRepository.GetAsyncByPassword(用户名、密码);
如果(用户!=null)
{
_eventaggregator.GetEvent().Publish(user.Id);
}
}
这是我的Bootstrapr代码
var bulider = new ContainerBuilder();
bulider.RegisterType<EventAggregator>().As<IEventAggregator>().SingleInstance();
bulider.RegisterType<BudGDbContext>().AsSelf();
bulider.RegisterType<SplashScreen>().AsSelf();
bulider.RegisterType<AuthorisationsWindow>().AsSelf();
bulider.RegisterType<MainWindow>().AsSelf();
bulider.RegisterType<MainViewModel>().AsSelf();
bulider.RegisterType<UserAccountViewModel>().As<IUserAccountViewModel>();
bulider.RegisterType<NavigationViewModel>().As<INavigationViewModel>();
bulider.RegisterType<LookupDataSeervice>().AsImplementedInterfaces();
bulider.RegisterType<UserRepository>().As<IUserRepository>();
return bulider.Build();
var bulider=newcontainerbuilder();
bulider.RegisterType().As().SingleInstance();
bulider.RegisterType().AsSelf();
bulider.RegisterType().AsSelf();
bulider.RegisterType().AsSelf();
bulider.RegisterType().AsSelf();
bulider.RegisterType().AsSelf();
bulider.RegisterType().As();
bulider.RegisterType().As();
bulider.RegisterType().AsImplementedInterface();
bulider.RegisterType().As();
返回bulider.Build();
因此,在这种情况下,我使用用户名和密码并获取名称和id,但当我移动到主窗口时,id返回到0,那么我如何才能从AuthorizationSwindow移动到具有id和用户名的主窗口