C# 如何在两个窗口之间发送数据,以便使用MVVM和autofac登录?

C# 如何在两个窗口之间发送数据,以便使用MVVM和autofac登录?,c#,wpf,mvvm,prism,autofac,C#,Wpf,Mvvm,Prism,Autofac,我正在编写我的第一个“真正的”MVVM应用程序,用户需要采取的第一步是提供登录凭据。我希望当用户输入用户名和密码时,会打开一个新窗口,其中包含用户的id和名称。因此,我有一个主视图模型和用户视图模型,并且我使用autofac进行依赖项注入,下面是我的代码 视图模型代码: public IEventAggregator _eventaggregator; private Func<IUserAccountViewModel> _useraccountviewmodelCre

我正在编写我的第一个“真正的”MVVM应用程序,用户需要采取的第一步是提供登录凭据。我希望当用户输入用户名和密码时,会打开一个新窗口,其中包含用户的id和名称。因此,我有一个主视图模型和用户视图模型,并且我使用autofac进行依赖项注入,下面是我的代码

视图模型代码:

  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和用户名的主窗口