WPF(1)的MVVM的数据驱动学习示例
MVVM
Model:数据模型、View 界面、ViewModel 业务逻辑处理
项目结构
界面数据绑定
<Window x:Class="WpfApp1.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Grid> <Label Content="输入的值" HorizontalAlignment="Left" Margin="68,52,0,0" VerticalAlignment="Top" Height="35" Width="69"/> <!--TextWrapping="Wrap" 内容是否换行--> <TextBox Name="txtUserName" Text="{Binding UserName}" HorizontalAlignment="Left" Margin="142,52,0,242.667" TextWrapping="Wrap" Width="123"/> <Button Content="SHOW" Click="Button_Click" HorizontalAlignment="Left" Margin="285,55,0,0" VerticalAlignment="Top" Width="78" Height="23"/> <!-- 控件数据的绑定--> <Label Content="{Binding UserName}" HorizontalAlignment="Left" Margin="142,87,0,0" VerticalAlignment="Top"/> </Grid> </Window>
后台代码
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; using WpfApp1.ViewModels; namespace WpfApp1 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.Loaded += MainWindow_Loaded; } private UserViewModel _userViewModel; private void MainWindow_Loaded(object sender, RoutedEventArgs e) { _userViewModel = new UserViewModel(); //指定界面的数据对上下文对象,XML Binding 绑定值时使用 this.DataContext = _userViewModel; _userViewModel.UserName = "cjhText"; } private void Button_Click(object sender, RoutedEventArgs e) { _userViewModel.UserName = txtUserName.Text; } } }
UserViewModel
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WpfApp1.ViewModels { public class UserViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string _userName; public string UserName { set { _userName = value; //数据更新 通知界面绑定的地方更新数据 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("UserName")); } get { return _userName; } } //propfull private int _sex; public int Sex { get { return _sex; } set { _sex = value; } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!