当前位置:   article > 正文

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

mvvmlight已弃用

目录

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(); 

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

  1. private string name;
  2. public string Name
  3. {
  4. get
  5. {
  6. return name;
  7. }
  8. set
  9. {
  10. name = value;
  11. RaisePropertyChanged();
  12. }
  13. }

3.事件绑定:RelayCommand;

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

  1. public RelayCommand ResetCommand { get; set; }
  2. ResetCommand = new RelayCommand(() =>
  3. {
  4. Query();
  5. });

 

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

2. Microsoft Toolkit Mvvm(已废弃)

1.继承接口:ObservableObject;

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

3.事件绑定:RelayCommand;

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

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

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

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

 3.CommunityToolkit.Mvvm框架

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

4.Mvvm中的事件绑定

4.1 DataGrid表中按钮点击事件

1.完整代码

  1. //xmlns代码:
  2. <DataGrid ItemsSource="{Binding Students}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserSortColumns="False" ColumnWidth="*" >
  3. <DataGrid.Columns>
  4. <DataGridTextColumn Header="姓名" Binding="{Binding Name}"/>
  5. <DataGridTextColumn Header="年龄" Binding="{Binding Age}"/>
  6. <DataGridTemplateColumn Header="操作">
  7. <DataGridTemplateColumn.CellTemplate>
  8. <DataTemplate>
  9. <Button Content="修改" Command="{Binding DataContext.Test, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"/>
  10. </DataTemplate>
  11. </DataGridTemplateColumn.CellTemplate>
  12. </DataGridTemplateColumn>
  13. </DataGrid.Columns>
  14. </DataGrid>
  15. //Viewmodel 代码
  16. public MainViewModel()
  17. {
  18. Students = new List<Student>()
  19. {
  20. new Student(){ Name="张三",Age=20},
  21. new Student(){ Name="张三",Age=20},
  22. new Student(){ Name="张三",Age=20}
  23. };
  24. //触发事件
  25. Test = new RelayCommand(() => {
  26. MessageBox.Show("测试");
  27. });
  28. }
  29. public List<Student> Students { get; set; }
  30. public RelayCommand Test { get; set; } //command事件
  31. //Student类
  32. public class Student:ObservableObject
  33. {
  34. private string name;
  35. public string Name
  36. {
  37. get {
  38. return name;
  39. }
  40. set {
  41. name= value; OnPropertyChanged();
  42. }
  43. }
  44. private int age;
  45. public int Age
  46. {
  47. get
  48. {
  49. return age;
  50. }
  51. set
  52. {
  53. age = value; OnPropertyChanged();
  54. }
  55. }
  56. }

 2.重点:

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

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

  1. viewmodel代码:
  2. EditCommand = new RelayCommand<int>(id => Edit(id));
  3. xmlns: CommandParameter中的参数可以传到 上方的 id ;
  4. <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所绑定的事件,在上面已经提供了相关文章;

  1. <Button Content="向前" Foreground="White" Width="100" Height="40" Template="{StaticResource Button1}" Background="#FF0D436E" Margin="80,0,0,0" >
  2. <i:Interaction.Triggers>
  3. <i:EventTrigger EventName="MouseRightButtonDown">
  4. <i:InvokeCommandAction Command="{Binding ForwardDown}" CommandParameter="read" />
  5. </i:EventTrigger>
  6. <i:EventTrigger EventName="MouseRightbuttonUp">
  7. <i:InvokeCommandAction Command="{Binding ForwardUp}" CommandParameter="read" />
  8. </i:EventTrigger>
  9. </i:Interaction.Triggers>
  10. </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#数据类型。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/82748
推荐阅读
相关标签
  

闽ICP备14008679号