wpf mvvm MenuItem的Command事件
这是一个事件的辅助类,可以通过它实现MenuItem的Command事件
public class MyCommands : Freezable, ICommand, ICommandSource{public MyCommands() {}public static readonly DependencyProperty CommandParameterProperty =DependencyProperty.Register("CommandParameter",typeof(object),typeof(MyCommands),new PropertyMetadata((object)null));public object CommandParameter{get{return (object)GetValue(CommandParameterProperty);}set{SetValue(CommandParameterProperty, value);}}public static readonly DependencyProperty CommandTargetProperty =DependencyProperty.Register("CommandTarget",typeof(IInputElement),typeof(MyCommands),new PropertyMetadata((IInputElement)null));public IInputElement CommandTarget{get{return (IInputElement)GetValue(CommandTargetProperty);}set{SetValue(CommandTargetProperty, value);}}public static readonly DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(MyCommands), new PropertyMetadata(new PropertyChangedCallback(OnCommandChanged)));public ICommand Command{get { return (ICommand)GetValue(CommandProperty); }set { SetValue(CommandProperty, value); }}#region ICommand Memberspublic bool CanExecute(object parameter){if (Command != null)return Command.CanExecute(CommandParameter);return false;}public void Execute(object parameter){Command.Execute(CommandParameter);}public event EventHandler CanExecuteChanged;private static void OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){MyCommands commandReference = d as MyCommands;ICommand oldCommand = e.OldValue as ICommand;ICommand newCommand = e.NewValue as ICommand;if (oldCommand != null){oldCommand.CanExecuteChanged -= commandReference.CanExecuteChanged;}if (newCommand != null){newCommand.CanExecuteChanged += commandReference.CanExecuteChanged;}}#endregion#region Freezableprotected override Freezable CreateInstanceCore(){throw new NotImplementedException();}#endregion}
在xaml中调用的方法
<UserControl.Resources><unititys:MyCommands x:Key="aaa" Command="{Binding Path=aaa}"/> </UserControl.Resources><ContextMenu x:Key="RouterMenu1" DataContext="{Binding RelativeSource={RelativeSource Mode=Self}, Path=PlacementTarget.DataContext}"><MenuItem Header="调用aaa" Command="{StaticResource aaa}"></MenuItem></ContextMenu>
在ViewModel中和普通的Command一样的调用就行了
转载于:https://www.cnblogs.com/chenjinshi/p/4645081.html
wpf mvvm MenuItem的Command事件相关推荐
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 从PRISM开始学 ...
- C# WPF MVVM模式Prism框架下事件发布与订阅
01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事 ...
- .NET Core 3 WPF MVVM框架 Prism系列之事件聚合器
本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信 一.事件聚合器 在上一篇 .NET Core 3 WPF MVVM框架 Prism系列之模块化 ...
- c#事件的发布-订阅模型_NET Core 3 WPF MVVM框架 Prism系列之事件聚合器
本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信 一.事件聚合器# 在上一篇 .NET Core 3 WPF MVVM框架 Prism系列之模块化 ...
- C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅
01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间 ...
- C# WPF MVVM模式Prism框架从零搭建(经典)
01 - 前言 目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码. Prism Github地址:https://github.com/P ...
- (WPF, MVVM) Event 处理
原文:(WPF, MVVM) Event 处理 WPF的有些UI元素有Command属性可以直接实现绑定,如Button 但是很多Event的触发如何绑定到ViewModel中的Command呢? 答 ...
- WPF MVVM实例三
在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...
最新文章
- 阿里、腾讯、美团、小米……各公司月饼大PK,看完简直想哭泣!
- 再见了Excel,我有Python了,不用天天加班了
- 学习.NET的两个网站:MSDN和Asp .NET
- 台积电要造第一款7nm芯片 明年下半年可投产
- ArcGIS实验教程——实验三十六:ArcGIS Python脚本的巧妙使用
- stomp 连接错误: Whoops! Lost connection to http://localhost:8080/spring13/stomp 的解决方法
- nginxlua文件服务器权限,通过lua进行nginx的权限控制
- 猜数字游戏(Java)
- 计算机图形学(一) 视频显示设备_3_随机扫描显示器
- 禁止特定IP访问Oracle数据库
- 最常被利用的三大 API 漏洞:是什么、为什么、如何阻止?
- 计算机组成原理—高速缓冲存储器
- 支持多浏览器的js拖拽 (转domkey0303 的blog)
- mac 安装 mongo 及基本命令
- word中如何去掉页眉横线?
- poi合并docx文档
- JavaScript中如何删除节点?
- Uber vs. Lyft
- 我的母校照片~~``
- Chrome 55 浏览器推出 Android 离线下载功能
热门文章
- 第一次软工作业展示——潘学
- 如何在工作组环境win 7远程管理Hyper-v server R2 SP1配置(三)
- 如何利用System.Net.Mail类发送EMAIL
- Android入门逆引手册 - 12 评分条(RatingBar)的使用
- chrome中Google插件导出导入
- Creating Apps With Material Design —— Creating Lists and Cards
- edoc2中标电子文件管理标准ERMS制定项目
- RDIFramework.NET(.NET快速开发框架) 答客户问(2014-02-23)
- WorldWind Java 版学习:1、启动过程
- Activit系列之---Activity的生命周期