WPF初学者的福音,高效的MVVM数据绑定教程
WPF原生搭建MVVM架构操作繁琐,代码冗杂,这里推荐使用CommunityToolkit_mvvm。
右键你的项目,选择管理Nuget程序包,选择包括预发行版,搜索communitytookit_mvvm
既然是MVVM架构,自然要创建ViewModels层和Models层:
models主要是暂存各种数据,给ViewModels层调用和View层绑定,
ViewModels主要是处理控件产生数据的逻辑关系。
MainWIndow主页样式
<Window x:Class="testAp.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:viewmodels="clr-namespace:testAp.ViewModel" //如果控件数据有绑定ViewModels的数据,那么加上这句(通常要加上,否则你的MVVM架构只是徒有其名,没有作用)xmlns:models="clr-namespace:testAp.Models"//如果控件数据有绑定ViewModels的数据,那么加上这句xmlns:local="clr-namespace:testAp"mc:Ignorable="d"Title="MVVM数据绑定" Height="450" Width="800"><Window.Resources><Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}"><Setter Property="HorizontalContentAlignment" Value="Center"></Setter></Style></Window.Resources><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><TextBox x:Name="textBox1" Grid.Column="0" TextWrapping="Wrap" Text="{Binding Text01}" Width="120" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBox x:Name="textBox2" Grid.Column="1" TextWrapping="Wrap" Text="{Binding Text02}" Width="120" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBox x:Name="textBox3" Grid.Column="2" TextWrapping="Wrap" Text="{Binding Text03}" Width="120" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBox x:Name="textBox4" Grid.Column="3" TextWrapping="Wrap" Text="{Binding Text04}" Width="120" HorizontalAlignment="Center" VerticalAlignment="Center"/><Button x:Name="button" Content="添加" Command="{Binding AddContextCommand}" Grid.Row="0" Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Top" Width="40" Margin="0,31,0,0" /><Button x:Name="button2" Content="移除" Command="{Binding DeleteCommand}" Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Top" Width="40" Margin="0,65,0,0" /><ListView x:Name="ListView1" ItemsSource="{Binding Items}" SelectionChanged="SelectChanged" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="5" Grid.RowSpan="3" ItemContainerStyle="{StaticResource ListViewItemStyle}" SelectionMode="Single" SelectedIndex="{Binding View, ElementName=listView}" ><ListView.View><GridView><GridViewColumn Header="x1" Width="200" DisplayMemberBinding="{Binding info01}"/><GridViewColumn Header="x2" Width="200" DisplayMemberBinding="{Binding info02}"/><GridViewColumn Header="x3" Width="200" DisplayMemberBinding="{Binding info03}"/><GridViewColumn Header="x4" Width="200" DisplayMemberBinding="{Binding info04}"/></GridView></ListView.View></ListView></Grid>
</Window>
效果:
ViewModels层
在ViewModels文件夹下自己创建的类,一般和View页面一一对应,我的是MainPageModel.cs
using CommunityToolkit.Mvvm.ComponentModel;//调用你安装的CommunityToolkit.Mvvm
using CommunityToolkit.Mvvm.Input;//Command命令需要
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using testAp.Models;namespace testAp.ViewModel
{public partial class MainPageModel:ObservableObject{public MainPageModel(){Items = new ObservableCollection<Info>();}[ObservableProperty]public ObservableCollection<Info> items;[ObservableProperty]string text01;[ObservableProperty]string text02;[ObservableProperty]string text03;[ObservableProperty]string text04;[RelayCommand]void AddContext(){Info info = new Info();info.info01 = Text01;info.info02 = Text02;info.info03 = Text03;info.info04 = Text04;items.Add(info);Text01=string.Empty;Text02=string.Empty;Text03=string.Empty;Text04=string.Empty;}[RelayCommand]void Delete(){ if (Models.TypeInfo.ReadyToRm != null){items.Remove(Models.TypeInfo.ReadyToRm);}} }
}
使用CommunityToolkit.mvvm的好处在于它会自动帮你生成你的绑定源的逻辑代码,你只需要在你新建的类型上加上**[ObservableProperty]**,
communityToolkit.mvvm帮你生成的文件在这里,自己打开看看
注意对于数据类,你只能用[ObservableProperty],对于操作Command,它接的主要是方法类xxx(),一般用[Relaycommand],
你声明的数据类型的名称,在绑定时首字母会变成大写;你声明的方法,在绑定时,首字母不仅要大写且要加上Command,请仔细对照我view和viewmodel代码的示例。
models层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace testAp.Models
{public class Info{public string info01 { get; set; }public string info02 { get; set; }public string info03 { get; set; }public string info04 { get; set; }}public class TypeInfo//删除操作时,先点击其中一列,该列的数据会暂存在这里,以便viewmodels层找到并准确删除该列。{public static Info ReadyToRm { get; set; }}
}
MainWindow.xaml.cs,view的隐藏代码
namespace testAp
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();MainPageModel MainViewPage = new MainPageModel();this.DataContext = MainViewPage;//为了实现绑定必须写的}private void SelectChanged(object sender, EventArgs e)//每次点击某列,操作会把该列的数据暂存在models层内{Models.TypeInfo.ReadyToRm = (Info)ListView1.SelectedItem;}}
}
示例
总结:
使用communitytoolkit.mvvm极大的缩减了代码量,让数据绑定变得简单高效。
WPF初学者的福音,高效的MVVM数据绑定教程相关推荐
- Node初学者入门,一本全面的NodeJS教程,微小的web框架,能实现文件上传功能以及数据解析功能...
Node初学者入门,一本全面的NodeJS教程 转载于:https://www.cnblogs.com/hfultrastrong/p/8036672.html
- 南京软件测试初学者钢琴曲,初学者一看就会的钢琴教程 !
原标题:初学者一看就会的钢琴教程 ! 任何乐器,就算是口琴这样一般人认为是简单的乐器,急于求成的心态只能导致最终这门乐器被放弃.看看那些什么速成班,45分钟学会弹钢琴,都是放屁.你每天花半个小时时间, ...
- studiolibrary安装_初学者daz studio中文基础安装布局教程
本视频教程是关于初学者daz studio中文基础安装布局教程 ,时长:10小时,大小:800 MB,MP4高清视格式,教程使用软件:DAZ Studio,语言:英语. 使用方法1:安装软件,直接将C ...
- lua菜鸟教程_初学者必看:Lua入门学习教程
Lua入门学习教程是本文要介绍的内容,主要是来对Lua入门的一个学习,Lua是一个被设计成用于扩展C/C++编程的轻量级脚本语言.不幸的是,网上很少有关于这个语言的在线教程.我主要通过阅读其源代码来了 ...
- easypermission坑_Android EasyPermissions官方库高效处理权限相关教程
介绍: easypermission库是一个简化基本的系统权限逻辑的库,可用于在Android M或者更高版本上. 1 相关文档 官方文档: 运行时权限官方文档解释: 2 为什么使用Easypermi ...
- lambda在python_在Python中使用lambda高效操作列表的教程
介绍 lambda Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错 result = lambda x: x * x result(2) # ...
- wpf初学者-wpf控件简单介绍
本文大纲 1.基本控件介绍与用法. 基本控件介绍与用法 文本控件 Label控件 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label ...
- WPF学习笔记一 依赖属性及其数据绑定
本文想通过由浅入深的讲解让读者比较深的理解依赖属性. 首先,我们回顾一下依赖属性的发展历史. 最初,人们提出面向对象编程时,并没有属性这个说法,当时叫做成员变量.一个对象由成员变量和成员函数组成,如 ...
- WPF 如何实现事件绑定 (MVVM)
什么是事件绑定? 首先说到绑定,一般是在WPF 中常见的,因为WPF中有一个比较好用的框架叫做 MVVM 所以View层的按钮等元件的的动作都是需要和后台ViewModel 中的函数进行绑定的. 如 ...
最新文章
- CTO点名要搞个灰度发布系统,不慌!
- FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转...
- HDU - 1875 畅通工程再续
- 开发中使用UEditor编辑器的注意事项
- 消息队列面试连环炮,你抗得住吗?
- 云计算学习(2-4)云计算的案例
- async和await结合读取文件
- 关于cp命令中拷贝所有的写法
- linux-文件的查找-find
- Android studio断点调试(全在这里)
- 简述计算机的主要分类及应用领域,【内存分类及特点是什么】_简述计算机内存的分类及各自特点?...
- Q131:PBRT-V3,对比SurfaceInteration和MediumInteraction(笔记)
- 外卖类应用的竞争与发展分析
- 如何做好公司固定资产管理?如何管理企业的固定资产
- 硬盘突然变raw格式_硬盘突然变成RAW格式解决办法
- Unity利用正态分布绘制噪点图
- 前端换肤功能如何实现
- 如何將人臉變漂亮(三)
- js 切比雪夫多项式实现
- 在线考试防作弊js代码