首页 > 其他分享 >MVVM中ICommand的具体使用

MVVM中ICommand的具体使用

时间:2024-03-22 12:12:34浏览次数:26  
标签:ICommand MVVM private 具体 func action parameter public

本节使用MVVM模式进行演示

MyCommand为自定义的命令类,代码如下:

public class MyComand : ICommand
{
    private readonly Action<object> _action;
    private readonly Func<object,bool>? _func;

    public  MyComand(Action<object> action, Func<object, bool> func)
    {
        _action = action;
        _func = func;
    }

    /// <summary>
    /// 事件处理器
    /// </summary>
    public event EventHandler? CanExecuteChanged;

    /// <summary>
    /// 能否执行 true/false
    /// </summary>
    /// <param name="parameter"></param>
    /// <returns></returns>
    /// <exception cref="NotImplementedException"></exception>
    public bool CanExecute(object? parameter)
    {
        return _func(parameter);
    }
    /// <summary>
    /// 执行命令
    /// </summary>
    /// <param name="parameter"></param>
    /// <exception cref="NotImplementedException"></exception>
    public void Execute(object? parameter)
    {
        _action(parameter);
    }
}
View Code

按照MVVM模式在项目下定义两个文件夹,Views、ViewModels。在Views中创建一个wpf窗体Demo1,在ViewModels中添加一个类Demo1ViewModel

 在Demo1的页面中注意添加,prism的相关引用,以及设置Command命令

<Window x:Class="WpfProject_Study.Views.Demo1"
        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:local="clr-namespace:WpfProject_Study.Views"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        mc:Ignorable="d"
        Title="Demo1" Height="450" Width="800">
    <Grid>
        <Button Content="点击按钮出现提示" Width="100" Height="30" Command="{Binding ShowDialogCommand}"></Button>
    </Grid>
</Window>
View Code

在DemoViewModel类中,实现自定义命令ShowDialogCommand。注意Command命令必须是public类型,且必须是属性而不是字段

 public class Demo1ViewModel : BindableBase
 {
     public MyComand ShowDialogCommand { get; set; }

     public Demo1ViewModel()
     {
         ShowDialogCommand = new MyComand(ShowDialog, myCanExec);
     }

     private void ShowDialog(object pramparameter)
     {
         MessageBox.Show("使用命令打开弹窗");
     }

     private bool isCanExec = true;
     private bool myCanExec(object pramparameter)
     {
         return isCanExec;
     }
 }
View Code

 

重新生成项目,点击按钮,即可实现效果。

 

标签:ICommand,MVVM,private,具体,func,action,parameter,public
From: https://www.cnblogs.com/xwzyac/p/18089152

相关文章

  • ICommand的实现(1)
    ICommand接口在System.Windows.Input命名空间内定义。它有两个方法和一个事件。////摘要://Occurswhenchangesoccurthataffectwhetherornotthecommandshouldexecute.eventEventHandler?CanExecuteChanged;////摘要://......
  • vue一些基础概念,核心理念,框架和库的区别,MVC和MVVM的区别,展示数据的几种方法、v-bind、
    1、什么是vue,核心理念,为什么学习vue1(单页面应用程序)用于构建用户界面的渐进式框架,采用自底向上增量开发的设计2数据驱动视图,组件化开发3轻量级框架、简单易学、虚拟的DOM、数据视图结构分离下面展示一些内联代码片。下面是vue的代码框架分为三部分:1.引入vue.js;2......
  • 正则表达式具体用法大全
     #正则表达式:##单字符匹配:```python#匹配某个字符串:#text="abc"#ret=re.match('b',text)#print(ret.group())#点(.):匹配任意的字符(除了'\n'):#text="\nabc"#ret=re.match('.',text)#print(ret.group())#\d:匹......
  • c/c++|gdb 单点调试 | 多点调试|查看栈中信息|具体变量
    设置断点,有什么好处,废话就不说了,可以去看手册设置断点,参考bxxx.cpp:n某个源文件的某行bfunc1调试某个函数编译g++test_gdb_watch.cpp-g设置断点bpowerr出现报错Missingseparatedebuginfos,use:debuginfo-installglibc-2.17-326.el7_9.x86_64libg......
  • WPF MVVM模式ListBox下ContextMenu绑定Command的方法以及将所选的Item的数据传回去
    需求:ListBoxItem上右键,将数据传参。疑问:ContextMenu不继承DataContext,导致直接用RelativeSource找根的方式也绑定不到。解决方法:在ListBox.ContextMenu里写菜单,就可以直接绑定到ViewModel层的命令了,参数先用RelativeSource找到ContextMenu,再绑定PlacementTarget.SelectedItem。......
  • Java调用python服务接口https遇到证书问题的具体解决
    是这样的,大概前一段时间做过一个业务,一直没有记录下来就是我们的算法部,封装好了一系列的算法,然后是python写的。而我们需要用Java去调用他们的方法。如何处理这个问题呢就是我在python里面写了一个rest-api,暴露出几个接口,供Java这边调。但是不知道为什么算法部当时那边弄了个......
  • 关联(包含具体实例)
    一、关联是什么?是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。关联有两元关系和多元关系。两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。两个类之间的简单关联表示了两个同等地位......
  • 农机常用跟踪算法----纯追踪算法的具体实现
            最近在做无人驾驶项目的过程中需要用到路径跟踪算法,考虑到无模型的路径跟踪算法有Stanley法和purepursuit法。相比之下Stanley算法的实现更快捷,在解算出横向偏差和航向偏差之后只需要调整增益系数解算前轮转角即可。而pp算法需要用到路径信息,需要实时的搜寻前......
  • Vue的MVVM模式与双向绑定原理
    v-model 是Vue.js框架中用于实现双向数据绑定的指令。它充分体现了MVVM(Model-View-ViewModel)模式中的双向数据绑定特性。下面我们将详细解释 v-model 如何体现MVVM和双向绑定:1.MVVM模式MVVM模式是一种软件架构设计模式,它将应用程序分为三个部分:Model(模型):代表应用程......
  • 万界星空科技WMS仓储管理包含哪些具体内容?
    wms仓库管理是通过入库业务、出库业务、仓库调拨、库存调拨和虚仓管理等功能,综合批次管理、物料对应、库存盘点、质检管理、虚仓管理和即时库存管理等功能综合运用的管理系统,有效控制并跟踪仓库业务的物流和成本管理全过程,实现完善的企业仓储信息管理。wms仓储管理系统的8大......