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设备建立联系(联调) 

 

本文中,继承接口,同步数据方法,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 工具

3fa4e9b556204481955ebfe262cab7d7.png

步骤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#数据类型。

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄荷撞~可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值