WPF MVVM(Model-View-ViewModel) 设计模式
在 WPF 应用程序中使用 MVVM(Model-View-ViewModel)设计模式的一部分,其中 ViewModel(TempModel)负责封装数据和业务逻辑,而 View(MainWindow.xaml)通过 DataBinding 与 ViewModel 进行交互。
Juster.Music\MainWindow.xaml
| <Window |
| x:Class="Juster.Music.MainWindow" |
| xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
| xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
| xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
| xmlns:local="clr-namespace:Juster.Music" |
| xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
| Title="MainWindow" |
| Width="800" |
| Height="450" |
| mc:Ignorable="d"> |
| <Grid> |
| |
| <Grid.RowDefinitions> |
| <RowDefinition /> |
| <RowDefinition /> |
| <RowDefinition /> |
| <RowDefinition /> |
| </Grid.RowDefinitions> |
| |
| <StackPanel HorizontalAlignment="Center" Orientation="Horizontal"> |
| <TextBlock |
| HorizontalAlignment="Center" |
| VerticalAlignment="Center" |
| Text="账号:" /> |
| |
| |
| |
| <TextBox |
| Name="TxtA" |
| Width="300" |
| Height="30" |
| Text="{Binding Account,UpdateSourceTrigger=PropertyChanged}" /> |
| </StackPanel> |
| |
| <StackPanel |
| Grid.Row="1" |
| HorizontalAlignment="Center" |
| Orientation="Horizontal"> |
| <TextBlock |
| HorizontalAlignment="Center" |
| VerticalAlignment="Center" |
| Text="密码:" /> |
| <TextBox |
| Name="TxtP" |
| Width="300" |
| Height="30" |
| Text="{Binding PassWrold, Mode=TwoWay}" /> |
| </StackPanel> |
| |
| |
| |
| |
| |
| <ComboBox |
| Grid.Row="2" |
| Width="200" |
| Height="25" |
| ItemsSource="{Binding LoginTypes}" /> |
| |
| <Button |
| Name="BtnLogin" |
| Grid.Row="3" |
| Width="200" |
| Height="30" |
| Click="BtnLogin_Click" |
| Content="Login" /> |
| </Grid> |
| </Window> |
| |
Juster.Music\MainWindow.xaml.cs
| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using System.Text; |
| using System.Threading.Tasks; |
| using System.Windows; |
| using System.Windows.Controls; |
| using System.Windows.Data; |
| using System.Windows.Documents; |
| using System.Windows.Input; |
| using System.Windows.Media; |
| using System.Windows.Media.Imaging; |
| using System.Windows.Navigation; |
| using System.Windows.Shapes; |
| |
| namespace Juster.Music |
| { |
| |
| |
| |
| public partial class MainWindow : Window |
| { |
| public MainWindow() |
| { |
| InitializeComponent(); |
| |
| |
| DataContext = new TempModel(); |
| } |
| |
| private void BtnLogin_Click(object sender, RoutedEventArgs e) |
| { |
| string a = TxtA.Text; |
| string p = TxtP.Text; |
| |
| if (a == "root" && p == "123") |
| { |
| MessageBox.Show("登录成功!"); |
| } |
| else |
| { |
| MessageBox.Show("登录失败!"); |
| } |
| } |
| } |
| } |
| |
Juster.Music\TempModel.cs
| using Juster.Common; |
| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using System.Text; |
| using System.Threading.Tasks; |
| |
| namespace Juster.Music |
| { |
| public class TempModel |
| { |
| |
| private string _account; |
| |
| public string Account |
| { |
| get { return _account; } |
| set |
| { |
| _account = value; |
| } |
| } |
| |
| private string _passwrold; |
| |
| public string PassWrold |
| { |
| get { return _passwrold; } |
| set |
| { |
| _passwrold = value; |
| } |
| } |
| |
| private List<string> _loginTypes; |
| |
| public List<string> LoginTypes |
| { |
| get { return _loginTypes; } |
| set { _loginTypes = value; } |
| } |
| |
| |
| |
| |
| public TempModel() |
| { |
| Account = "root"; |
| LoginTypes = new List<string>(); |
| LoginTypes.Add("手机号登录"); |
| LoginTypes.Add("账号密码登录"); |
| LoginTypes.Add("二维码登录"); |
| } |
| } |
| } |
| |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战