C# 使用 MVVM - 困难的行为

标签 c# wpf mvvm navigation

<分区>

在花费数小时(也许数天)努力解决问题后,我决定相信您的知识。我想实现这个行为(蓝色):enter image description here

因此,在 loginButton 中,我触发了一个在 loginViewModel 中处理的命令,在此处理程序中,我对网络服务进行了一些验证,并使用该答案我想打开一个发送用户(类)的新窗口。我怎样才能做到这一点?

我试过消息传递,我试过很多东西。在代码隐藏中,我想使用 MVVM 架构来做这样的事情。

LoginView 代码隐藏

 button_OnClick(){
// Checking stuff
    var u = //from the server;
    PrincipalView pv = new PrincipalView(u);
    pv.Show();
    this.Close()
}

PrincipalView 代码隐藏中:

public PrincipalView(User u){
        // Yey, I have the user
  }

最佳答案

我已经通过使用自定义窗口服务类来完成此操作,如下所示:

 class WindowsService
{
    private static LoginWindow loginWindow{ get; set; }

    private static UserWindow UserWindow{ get; set; }

    public void ShowLoginWindow(LoginViewModel loginViewModel)
    {
        LoginWindow = new LoginWindow 
        {
            DataContext = loginViewModel
        };
        LoginWindow.Show();
    }
    public void ShowUserWindow(UserViewModel userViewModel)
    {
        UserWindow = new UserWindow 
        {
            DataContext = userViewModel
        };

        LoginWindow .Hide();
        UserWindow.Show();
    }
}

因此,您在 LoginViewModel 中声明了一个 WindowsService 实例,当您的逻辑找到用户时,您就创建了一个 UserViewModel 实例,并且调用 windowsService.ShowUserWindow(userViewModel)。为了正确使用它,您必须像这样修改您的 App.xaml.cs 文件:

public partial class App : Application
{
    private void App_OnStartup(object sender, StartupEventArgs e)
    {
        var loginViewModel = new LoginViewModel();
        loginViewModel.StartLoginWindowService();
    }
}

StartLoginWindowService() 方法可能如下所示:

public void StartLoginWindowService()
    {
        WindowsService.ShowLoginWindow(this);
    }

如果有帮助,请告诉我

解释在何处创建 UserWindowViemodel

假设您的 loginViewmodel 中有以下方法

public void Loging(string name, string pass){
  var isAllowed(name, pass); //Check if user exists and if pass is correct
  if(!isAllowed) return; //we return if user is invalid
  var wService = new WindowsService();
  var myUser = new UserWindowViewModel(name){
    //you set all proeperties you need here
  }
  wService.ShowUserWindow(myUser);
}

关于C# 使用 MVVM - 困难的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36987571/

相关文章:

c# - yield 为空

c# - WPF:在 UserControl 的构造函数中加载数据会破坏设计器

c# - 异步图像加载到列表框中

c# - 用Catel关闭窗口

mvvm - 是否应该通过构造函数、属性或方法调用来初始化 ViewModel

c# - UpdatePanel PostbackTrigger 位于母版页内的用户控件内?

c# - 如何使用 makecert 创建证书颁发机构证书?

c# - 媒体播放器如何播放列表框中的所有文件?

mvvm - 在 knockout 中创建可重复使用的模板

c# - 如何创建和管理多个数据集