在WPF MVVM中如何将数据从Window.xaml.cs发送到WindowViewModels

本文关键字:cs xaml Window WindowViewModels 数据 MVVM WPF | 更新日期: 2023-09-27 18:20:57

我正在创建登录功能,我需要将用户信息从我的xaml.cs发送到我的ViewModels所以当我点击按钮时,我需要用我的数据显示其他窗口

我该怎么做

LoginPage.xaml.cs 中的我的点击功能

    private void LoginButton_OnClick(object sender, RoutedEventArgs e)
    {
        LoginPageViewModels ViewModel = new LoginPageViewModels();
        SqlHelper Sql = new SqlHelper();
        string ConnectionState = Sql.SqlConnectionState();
        // Check connection;
        if (ConnectionState == "Connected")
        {
            List<User> User = new List<User>();
            string username = UsernameInput.Text;
            string password = PasswordInput.Password;
            User = ViewModel.Auth(username, password);
            if (User.Count >= 1)
            {
                MainPage mainPage = new MainPage();
                mainPage.Show();
                this.Close();
            }
            else
            {
                AuthResultMessage.Text = "User not found";
            }
        }
        else
        {
            AuthResultMessage.Text = ConnectionState;
        }
    }

我需要将List<User> User发送到我的新MainPage mainPage,然后我需要将User绑定到mainPage

在WPF MVVM中如何将数据从Window.xaml.cs发送到WindowViewModels

如果您正在进行MVVM,通常不应该编写按钮单击事件。应该使用数据绑定将UI元素绑定到视图模型中的属性。

<TextBlock Text="{Binding Path=ViewModelTextProperty}">

其中ViewModelTextProperty是您希望绑定到的视图模型中的属性。

按钮应该是绑定命令,这些属性具有实现ICommand接口的返回类型。

<Button Command="{Binding Path=ViewModelButtonCommand}">

其中ViewModelButtonCommand是ICommand类型的视图模型中的属性。

然后,您的视图模型拥有字符串的所有权,并可以在单击登录按钮后使用它们执行登录逻辑。

更新每个绑定属性时,视图模型类将需要触发PropertyChanged事件,以便触发视图的更新。请参阅MSDN上关于实现MVVM模式的文章:https://msdn.microsoft.com/en-us/library/gg405484%28v=PandP.40%29.aspx

我找到了解决方案

我可以在MainPageViewModels.cs中添加User UserData {get;set;}属性和xaml.cs

private void LoginButton_OnClick(object sender, RoutedEventArgs e)
{
    LoginPageViewModels ViewModel = new LoginPageViewModels();
    SqlHelper Sql = new SqlHelper();
    string ConnectionState = Sql.SqlConnectionState();
    // Check connection;
    if (ConnectionState == "Connected")
    {
        User userData= new User;
        string username = UsernameInput.Text;
        string password = PasswordInput.Password;
        userData= ViewModel.Auth(username, password);
        if (userData.Username != null)
        {
            MainPage mainPage = new MainPage();
            mainPage.UserData=userData;
            mainPage.Show();
            this.Close();
        }
        else
        {
            AuthResultMessage.Text = "User not found";
        }
    }
    else
    {
        AuthResultMessage.Text = ConnectionState;
    }