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数据绑定教程相关推荐

  1. Node初学者入门,一本全面的NodeJS教程,微小的web框架,能实现文件上传功能以及数据解析功能...

    Node初学者入门,一本全面的NodeJS教程 转载于:https://www.cnblogs.com/hfultrastrong/p/8036672.html

  2. 南京软件测试初学者钢琴曲,初学者一看就会的钢琴教程 !

    原标题:初学者一看就会的钢琴教程 ! 任何乐器,就算是口琴这样一般人认为是简单的乐器,急于求成的心态只能导致最终这门乐器被放弃.看看那些什么速成班,45分钟学会弹钢琴,都是放屁.你每天花半个小时时间, ...

  3. studiolibrary安装_初学者daz studio中文基础安装布局教程

    本视频教程是关于初学者daz studio中文基础安装布局教程 ,时长:10小时,大小:800 MB,MP4高清视格式,教程使用软件:DAZ Studio,语言:英语. 使用方法1:安装软件,直接将C ...

  4. lua菜鸟教程_初学者必看:Lua入门学习教程

    Lua入门学习教程是本文要介绍的内容,主要是来对Lua入门的一个学习,Lua是一个被设计成用于扩展C/C++编程的轻量级脚本语言.不幸的是,网上很少有关于这个语言的在线教程.我主要通过阅读其源代码来了 ...

  5. easypermission坑_Android EasyPermissions官方库高效处理权限相关教程

    介绍: easypermission库是一个简化基本的系统权限逻辑的库,可用于在Android M或者更高版本上. 1 相关文档 官方文档: 运行时权限官方文档解释: 2 为什么使用Easypermi ...

  6. lambda在python_在Python中使用lambda高效操作列表的教程

    介绍 lambda Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错 result = lambda x: x * x result(2) # ...

  7. wpf初学者-wpf控件简单介绍

    本文大纲 1.基本控件介绍与用法. 基本控件介绍与用法 文本控件 Label控件 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label ...

  8. WPF学习笔记一 依赖属性及其数据绑定

    本文想通过由浅入深的讲解让读者比较深的理解依赖属性.  首先,我们回顾一下依赖属性的发展历史. 最初,人们提出面向对象编程时,并没有属性这个说法,当时叫做成员变量.一个对象由成员变量和成员函数组成,如 ...

  9. WPF 如何实现事件绑定 (MVVM)

    什么是事件绑定? 首先说到绑定,一般是在WPF 中常见的,因为WPF中有一个比较好用的框架叫做 MVVM 所以View层的按钮等元件的的动作都是需要和后台ViewModel 中的函数进行绑定的. 如 ...

最新文章

  1. CTO点名要搞个灰度发布系统,不慌!
  2. FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转...
  3. HDU - 1875 畅通工程再续
  4. 开发中使用UEditor编辑器的注意事项
  5. 消息队列面试连环炮,你抗得住吗?
  6. 云计算学习(2-4)云计算的案例
  7. async和await结合读取文件
  8. 关于cp命令中拷贝所有的写法
  9. linux-文件的查找-find
  10. Android studio断点调试(全在这里)
  11. 简述计算机的主要分类及应用领域,【内存分类及特点是什么】_简述计算机内存的分类及各自特点?...
  12. Q131:PBRT-V3,对比SurfaceInteration和MediumInteraction(笔记)
  13. 外卖类应用的竞争与发展分析
  14. 如何做好公司固定资产管理?如何管理企业的固定资产
  15. 硬盘突然变raw格式_硬盘突然变成RAW格式解决办法
  16. Unity利用正态分布绘制噪点图
  17. 前端换肤功能如何实现
  18. 如何將人臉變漂亮(三)
  19. js 切比雪夫多项式实现
  20. 在线考试防作弊js代码

热门文章

  1. 网络工程师 B站希赛视频第9章因特网与网络互联技术学习笔记
  2. unbuntu中C语言环境安装
  3. struts2文件上传下载
  4. 康耐视Designer-通过康耐视VC5与Omron PLC CJ2MEthernet IP通讯详细设置步骤
  5. 【软考系统架构设计师】2018下系统架构师综合知识历年真题
  6. element框架的teble表格的数据展示由横向转纵向
  7. 使用笔记本作无线热点
  8. Elastic学习方法论
  9. 苹果备份备忘录android,iphone备忘录如何导出到另一个安卓手机?
  10. 安装小米笔记本安装华为管家,实现手机在电脑多屏协同卡顿