在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
如果您正在进行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;
}