MVVM登录成功后关闭登录窗口

不知道你们用MVVM框架做WPF项目的时候有没有遇到一个问题,当你的登录窗体登录成功进入到主页面的时候,登录窗体还是会在后台挂着。也就是说登录到主页面后,登录窗体还没有完全关闭,这样也是十分不符合逻辑的。你们找到解决办法了吗?如果没有我就介绍一下我的这一种方法。
原效果:
在这里插入图片描述

我们这里通过登录窗口进到主页面后,登录窗口还未关闭,还在后台。
现在上代码:
首先在页面给窗口一个名字
在这里插入图片描述

然后在你登录按钮放一个命令传参,把页面放进去
在这里插入图片描述

接着我们来到后台:
给一个属性
在这里插入图片描述

再给你的命令加window
在这里插入图片描述

再给你登录完成后的代码加上关闭窗口的方法
在这里插入图片描述

最后在构造函数里用命令调用方法就大功告成了
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的WPF MVVM模式的登录界面及代码: XAML代码: ```xml <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp1" Title="Login" Height="250" Width="350"> <Window.DataContext> <local:LoginViewModel /> </Window.DataContext> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0" Content="Username:"/> <TextBox Grid.Row="0" Grid.Column="1" Width="200" Margin="5" Text="{Binding Username}" /> <Label Grid.Row="1" Grid.Column="0" Content="Password:"/> <PasswordBox Grid.Row="1" Grid.Column="1" Width="200" Margin="5" Password="{Binding Password}" /> <Button Grid.Row="2" Grid.Column="1" Width="100" Margin="5" Content="Login" Command="{Binding LoginCommand}" IsDefault="True"/> <Label Grid.Row="3" Grid.Column="1" Content="{Binding ErrorMessage}" Foreground="Red" HorizontalAlignment="Center"/> <CheckBox Grid.Row="4" Grid.Column="1" Content="Remember Me" Margin="5" IsChecked="{Binding RememberMe}"/> </Grid> </Window> ``` ViewModel代码: ```csharp using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Input; namespace WpfApp1 { public class LoginViewModel : INotifyPropertyChanged { private string _username; private string _password; private bool _rememberMe; private string _errorMessage; public string Username { get { return _username; } set { _username = value; OnPropertyChanged(); } } public string Password { get { return _password; } set { _password = value; OnPropertyChanged(); } } public bool RememberMe { get { return _rememberMe; } set { _rememberMe = value; OnPropertyChanged(); } } public string ErrorMessage { get { return _errorMessage; } set { _errorMessage = value; OnPropertyChanged(); } } public ICommand LoginCommand { get; set; } public LoginViewModel() { LoginCommand = new RelayCommand(Login, CanLogin); } private bool CanLogin() { return !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password); } private void Login() { if (Username == "admin" && Password == "password") { if (RememberMe) { // Save login information to file or database } MessageBox.Show("Login successful!"); } else { ErrorMessage = "Invalid username or password"; } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } } ``` 其中,`RelayCommand`是一个实现了`ICommand`接口的自定义命令类,用于绑定按钮的点击事件。你可以在网上找到相关实现代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值