首页 > 编程语言 >[转][C#][WPF]原生使用 ICommand

[转][C#][WPF]原生使用 ICommand

时间:2023-12-13 22:45:08浏览次数:46  
标签:ICommand MyCommand C# MainWindowModel 按钮 action WPF 传参 public

传参这里参考:https://www.cnblogs.com/zhlziliaoku/p/5867556.html

界面上添加一个按钮 

<Button Content="点击" Width="120" Height="31" Command="{Binding showCommand}" CommandParameter="{Binding RelativeSource={RelativeSource self}}"></Button>

也可以修改参数为:

<Button Content="点击" Width="120" Height="31" Command="{Binding showCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"></Button>

后台代码,在构造函数里添加:

this.DataContext = new MainWindowModel();

在 MainWindowModel 类这样写:

public class MainWindowModel
{
    public MyCommand showCommand { get; set; }

    public MainWindowModel()
    {
        showCommand = new MyCommand(Show);
    }

    public void Show(object obj)
    {
        MessageBox.Show("点击了按钮!");
    }
}
MyCommand 的定义是:
public class MyCommand : ICommand
{
    Action<object> _action;
    public MyCommand(Action<object> action)
    {
        _action = action;
    }

    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        _action(parameter);
    }
}

这样就完成了界面按钮与后台方法的关联,可以打断点看一下两个传参的区别(一个传参是按钮 ,一个传参是当前窗体)。

标签:ICommand,MyCommand,C#,MainWindowModel,按钮,action,WPF,传参,public
From: https://www.cnblogs.com/z5337/p/17900110.html

相关文章

  • fusion accessR6本地挂载光驱的Java环境问题
    fusion access版本:R6外部操作环境:windows7准备制作的模版:windows7 旗舰版64 办公软件:office2010tools:ultraiso,firefox33,360万能网卡驱动本地挂载光驱的Java环境问题:安装完模板虚拟机后网卡无法识别,需要安装网卡驱动,由于没有IP地址,只能使用光驱本地挂载。解决方案:......
  • [转]cryptoJs DES_CBC_Pkcs7 转成 Java(对称加密早期协议"DES"现已不安全,仅用于老项
    原文地址:cryptoJsDES_CBC_Pkcs7转成Java-唯学而知-博客园前端DES加密:importcryptoJsfrom'crypto-js';//DES加密functionencrypt(message,key,iv){//字符串转16进制constkeyHex=cryptoJs.enc.Utf8.parse(key);constivHex=cryptoJs.enc.U......
  • C++学习笔记九:值,常量,常表达式和常初始化
    1.值:Literal:Datathatisdirectlyrepresentedincodewithoutgoingthroughsomeothervariablestoredinmemory.值:直接在代码中表示的数据,无需通过内存中存储的其他变量。值不在内存中进行存储,而是直接在二进制的可执行文件中产生。1.1整型//Literaltypes:ua......
  • P4463 [集训队互测 2012] calc 题解
    Description一个序列\(a_1,a_2,\dots,a_n\)是合法的,当且仅当:\(a_1,a_2,\dots,a_n\)都是\([1,k]\)中的整数。\(a_1,a_2,\dots,a_n\)互不相等。一个序列的值定义为它里面所有数的乘积,即\(a_1\timesa_2\times\dots\timesa_n\)。求所有不同合法序列的值的和对\(p\)......
  • WSL 2 Docker 安装 code-server 远程开发
    安装WSL启用wsl功能,选中“适用于Linux的Windows子系统”。在微软应用商店安装Ubuntu-22.04。WSL文档请查看官方文档。 WSL安装Docker参考 Docker文档。docker安装完了之后却启动不了,百度之后才发现安装的是WSL1,需要升级到WSL2。 升......
  • 如何判断lib和dll是32位还是64位?答案是使用微软的dumpbin工具,后面讲了如何使用gcc生成
    为什么我会考虑这个问题呢?因为我在使用java去调用一个c的lib库的时候,弹出以下警告:D:\work\ideaworkpaces\jdk21Test001\src\main\java\lib\hello.lib:%1不是有效的Win32应用程序。atjava.base/jdk.internal.loader.NativeLibraries.load(NativeMethod)然后我就在想是不是......
  • 算法战斗第二天C++2
    A.NextRound"Contestantwhoearnsascoreequaltoorgreaterthanthek-thplacefinisher'sscorewilladvancetothenextround,aslongasthecontestantearnsapositivescore..."—anexcerptfromcontestrules.Atotalofnpartic......
  • # yyds干货盘点 # 我设置for循环后里面因为内嵌函数,然后里面加continue没用,提示不在循
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python函数处理的问题,一起来看看吧。代码如下:代码还是有点长的。二、实现过程这里【隔壁......
  • ArcPy批量计算多张栅格图像各像元的平均数值
      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取。  在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取——这一操作很好实现,基于ArcMap软件或者简单的Python代码就可以实现;但有时候,我们会需......
  • MUI增加自定义icon图标
    mui框架遵循极简原则,在icon图标集上也是如此,mui仅集成了原生系统中最常用的图标;使用icon图标集的优点:多个图标字体合成一个字体文件,避免每张图片都需要联网请求;字体可任意缩放,而图片放大会失真、缩小则浪费像素;可通过css任意改变颜色、设置阴影及透明效果;一、操作方法:(1)找到任意矢量......