WPF MvvM框架(MvvMLight,Microsoft Toolkit Mvvm,CommunityToolkit.Mvvm;鼠标,键盘,手写等事件绑定如:抬起按下事件)

这篇具有很好参考价值的文章主要介绍了WPF MvvM框架(MvvMLight,Microsoft Toolkit Mvvm,CommunityToolkit.Mvvm;鼠标,键盘,手写等事件绑定如:抬起按下事件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.MvvMLight(已废弃)

2. Microsoft Toolkit Mvvm(已废弃)

 3.CommunityToolkit.Mvvm框架

4.Mvvm中的事件绑定

4.1 DataGrid表中按钮点击事件

4.2 绑定 鼠标事件,键盘事件,手写笔事件,多点触控事件

5.和PLC设备建立联系(联调) 

 文章来源地址https://www.toymoban.com/news/detail-756162.html

本文中,继承接口,同步数据方法,command用法均一致;

1.MvvMLight(已废弃)

1.继承接口:ViewmodelBase;

谁需要继承? ---存放变量值的类;viewmodel类;

2.同步数据方法:RasisepropertyChanged(); 

谁用?  用于和视图进行数据同步的变量;

private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
                RaisePropertyChanged();
            }
        }

3.事件绑定:RelayCommand;

注意:此处  get;set是必须的;要不然不能进入方法;

 public RelayCommand ResetCommand { get; set; }
 ResetCommand = new RelayCommand(() =>
            {
                Query();
            });

 

4.当多个控件绑定一个参数时,在视图上该变一个控件的值时,只有再失去焦点时,才会把视图数据返回给数据模板,然后数据模板再将数据传给视图上其他绑定的控件(简单的说就是,改变一个控件的值,其他控件不会立即随着改变,需要失去焦点后,其他控件才能显示更改的值);

2. Microsoft Toolkit Mvvm(已废弃)

1.继承接口:ObservableObject;

2同步数据方法:OnPropertyChanged();

3.事件绑定:RelayCommand;

4.WeakReferenceMessenger.Default.Register()注册消息;

 WeakReferenceMessenger.Default.Send(s, "sendstring");

5.WeakReferenceMessenger.Default.Send()发送消息;

 WeakReferenceMessenger.Default.Register<string,string>(this, "sendstring", (s, e) => {
                MessageBox.Show(e);
                    }) ;

 3.CommunityToolkit.Mvvm框架

Microsoft Toolkit Mvvm 框架被废弃之后,微软官方推荐使用CommunityToolkit.Mvvm框架,
此框架基本上和Microsoft Toolkit Mvvm 框架类似,用法也类似。

4.Mvvm中的事件绑定

4.1 DataGrid表中按钮点击事件

1.完整代码

//xmlns代码:
<DataGrid ItemsSource="{Binding Students}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserSortColumns="False"  ColumnWidth="*" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="姓名" Binding="{Binding Name}"/>
                    <DataGridTextColumn Header="年龄" Binding="{Binding Age}"/>
                    <DataGridTemplateColumn Header="操作">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="修改" Command="{Binding DataContext.Test, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
//Viewmodel 代码
public MainViewModel()
        {
 Students = new List<Student>()
           {
            new Student(){ Name="张三",Age=20},
              new Student(){ Name="张三",Age=20},
                new Student(){ Name="张三",Age=20}
           };
            //触发事件
            Test = new RelayCommand(() => {
                MessageBox.Show("测试");
            });

        }
 public List<Student> Students { get; set; }
 public RelayCommand Test { get; set; }  //command事件

//Student类
 public class Student:ObservableObject
    {
        private string name;
        public string Name
        {
            get { 
            return name;
            }
            set { 
            name= value; OnPropertyChanged();
            }
        }
        private int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                age = value; OnPropertyChanged();
            }
        }
       
    }

 2.重点:

1 数据表中 command的绑定方式:

注意:这里是可以传参的 CommandParameter(所有的command 绑定都是可以传参的)

 viewmodel代码:
EditCommand = new RelayCommand<int>(id =>  Edit(id));

xmlns: CommandParameter中的参数可以传到 上方的 id ;
<Button Content="修改" Command="{Binding DataContext.EditCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}" CommandParameter="{Binding Id}"/>

2. 禁止自动添加行:CanUserAddRows="False",列:AutoGenerateColumns="False",

数据表填充: ColumnWidth="*"

4.2 绑定 鼠标事件,键盘事件,手写笔事件,多点触控事件

这里只记录 如何绑定使用步骤和代码;

关于 绑定各个事件所需要的 事件名称:可以参考一下文章:

WPF高级教程(八)专题:事件_聂14昊51的博客-CSDN博客

步骤1:

在nuget 管理中增加 Microsoft.Xaml.Interactions 工具

WPF MvvM框架(MvvMLight,Microsoft Toolkit Mvvm,CommunityToolkit.Mvvm;鼠标,键盘,手写等事件绑定如:抬起按下事件),WPF,wpf

步骤2: 在xmal 中引用该命名空间

   xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

步骤3:可以直接套用,其中 Eventname所绑定的事件,在上面已经提供了相关文章;

 <Button Content="向前"  Foreground="White" Width="100" Height="40" Template="{StaticResource Button1}" Background="#FF0D436E" Margin="80,0,0,0" >
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseRightButtonDown">
                                <i:InvokeCommandAction Command="{Binding ForwardDown}"  CommandParameter="read" />
                            </i:EventTrigger>
                            <i:EventTrigger EventName="MouseRightbuttonUp">
                                <i:InvokeCommandAction Command="{Binding ForwardUp}"  CommandParameter="read" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </Button>

 

5.和PLC设备建立联系(联调) 

1.plc 的连接

需要ip,cpu类型,端口号,机架地址,插槽位置;

 Plc plc = new Plc(CpuType.S71200, "192.168.8.10", 102, 0, 1);

2.plc读数据(read):例如:需要根据情况进行数据转换

   string db8_df052 = ((uint)plc.Read("DB8.DBD52")).ConvertToFloat().ToString("0.0000");

3.plc写数据(write):命令+true/flase 根据情况而定

  plc.Write("DB8.DBX1.4", true);

4.读写过程中关键点:如何把PLC的数据类型转换成C#数据类型。

 

到了这里,关于WPF MvvM框架(MvvMLight,Microsoft Toolkit Mvvm,CommunityToolkit.Mvvm;鼠标,键盘,手写等事件绑定如:抬起按下事件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF CommunityToolkit.Mvvm Messenger通讯

    CommunityToolkit.Mvvm Messenger 十月的寒流: 如何使用 CommunityToolkit.Mvvm 中的 Messenger 来进行 ViewModel 之间的通信 我这里只讲简单的弱Messenger,这个是Toolkit帮我们封装好的,里面好像有什么垃圾回收什么的,里面怎么运行的我也没去研究。我这里就简单讲解一下怎么用 WeakReferenceMess

    2024年02月09日
    浏览(42)
  • wpf CommunityToolkit.Mvvm8.1 MVVM工具包安装引用指南

      本系列文章导航 https://www.cnblogs.com/aierong/category/2297596.html     0.说明 CommunityToolkit.Mvvm包(又名MVVM 工具包,以前名为 Microsoft.Toolkit.Mvvm)是一个现代、快速且模块化的 MVVM 库。 它支持:.NET Standard 2.0、 .NET Standard 2.1 和 .NET 6(UI Framework 不支持)   文档地址: https://learn.microsoft.com/z

    2023年04月08日
    浏览(42)
  • [.NET/WPF] CommunityToolkit.Mvvm 异步指令

    我们在开发中, 经常会有这样的需求: 点击按钮后, 进行一些耗时的工作 工作进行时, 按钮不可再次被点击 工作进行时, 会显示进度条, 或者 “加载中” 的动画 CommunityToolkit.Mvvm 中的 RelayCommand 除了支持最简单的同步方法, 还支持以 Task 作为返回值的异步方法, 当我们为这样的异

    2024年02月12日
    浏览(45)
  • VisualStudio[WPF/.NET]基于CommunityToolkit.Mvvm架构开发

    项目模板选择如下: 暂时随机填一个目标框架,待会改: 双击“解决方案资源管理器”中项目CU-APP, 打开项目工程文件CU-APP.csproj, 修改目标框架 TargetFramework 为.net framework 4.7.2 ;  C#语言版本 LangVersion 为  9.0  \\\"工具\\\" - \\\"NuGet包管理器\\\",“管理解决方案的NuGet程序包(N)”,  或者,

    2024年02月07日
    浏览(40)
  • 使用MVVM Toolkit简化WPF开发

    最近. NET 8 的 WPF 推出了 WPF File Dialog改进,这样无需再引用 Win32 命名空间就可以实现文件夹的选择与存储了,算是一个很方便的改进了。顺手写了一个小的 WPF 程序,在使用 Model-View-ViewModel(MVVM) 模式的时候,我不想使用 Prism 等重量级的框架,找了一个轻量级的 MVVM Community T

    2024年02月05日
    浏览(61)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)

    在我们的SqlSugar的开发框架中,整合了Winform端、Vue3+ElementPlus的前端、以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了,本篇随笔进一步介绍前端应用的领域,研究集成WPF的应用端,循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端

    2024年02月09日
    浏览(55)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(2)

    在前面随笔《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)》中介绍了Mvvm 的开发,以及一些界面效果,本篇随笔继续深入探讨基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发,介绍如何整合SqlSugar框架的基础接口,通过基类继承的方式,简化实际项目的开

    2024年02月09日
    浏览(58)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件

    在我们创建界面元素的时候,不管在Vue3+ElementPlus的前端上,还是Winform桌面端上,都是会利用自定义用户控件来快速重用一些自定义的界面内容,对自定义用户控件的封装处理,也是我们开发WPF应用需要熟悉的一环。本篇随笔继续深入介绍介绍基于CommunityToolkit.Mvvm 和HandyCont

    2024年02月09日
    浏览(58)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用

    在我们展示一些参考信息的时候,有所会用树形列表来展示结构信息,如对于有父子关系的多层级部门机构,以及一些常用如字典大类节点,也都可以利用树形列表的方式进行展示,本篇随笔介绍基于WPF的方式,使用TreeView来洗实现结构信息的展示,以及对它的菜单进行的设

    2024年02月08日
    浏览(46)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列表展示和选择处理

    我们在WPF应用端的界面中,使用lepoco/wpfui 来做主要的入口框架,这个项目它的菜单内置了不少图标,我们需要在动态菜单的配置中,使用它作为图标的展示处理,本篇随笔介绍如何基于图标枚举集合进行图标的展示和选择处理。并扩展到Font-Awesome-WPF的处理进行展示和选择。

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包