WPF MVVM COMMOND 传参

原文:WPF MVVM COMMOND 传参

一、直接绑定(对于有事件的控件可以通过直接绑定的方式)

1、view


  1. <hc:SideMenuItem Header="接谈中" Cursor="Hand" Command="{Binding AddTabItemCommand}" CommandParameter="PDjtList.xaml">
  2. <hc:SideMenuItem.Icon>
  3. <Image Source="/Images/icons/jtz.png" Width="24" Height="24"/>
  4. </hc:SideMenuItem.Icon>
  5. </hc:SideMenuItem>

2、viewmodel


  1. /// <summary>
  2. /// 命令:传递参数
  3. /// </summary>
  4. public RelayCommand<string> AddTabItemCommand =>
  5. new Lazy<RelayCommand<string>>(() =>
  6. new RelayCommand<string>(AddTabItem)).Value;
  7. /// <summary>
  8. /// 添加新页面
  9. /// </summary>
  10. /// <param name="param"></param>
  11. private void AddTabItem(string param)
  12. {
  13. string test = param;
  14. }

二、EventTrigger绑定(对于通过datatemp遍历的控件没有事件可以绑定的情况,如listbox)

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

  1. <ListBox Name="sideMenu" SelectedIndex="{Binding MenuSelectedIndex}" ItemsSource="{Binding MenuList}" BorderThickness="0" SelectionMode="Single">
  2. <ListBox.ItemTemplate>
  3. <DataTemplate>
  4. <DockPanel Height="40">
  5. <Image Width="20" Height="20" Source="{Binding Icons}"/>
  6. <TextBlock Margin="10,12,0,0" FontSize="14" Text="{Binding Title}"/>
  7. <TextBox x:Name="param" Visibility="Hidden" Text="{Binding Url}"/>
  8. </DockPanel>
  9. </DataTemplate>
  10. </ListBox.ItemTemplate>
  11. <i:Interaction.Triggers>
  12. <i:EventTrigger EventName="SelectionChanged">
  13. <command:EventToCommand Command="{Binding ElementName=sideMenu, Path=DataContext.SelectMenuCommand}" PassEventArgsToCommand="True" />
  14. </i:EventTrigger>
  15. </i:Interaction.Triggers>
  16. </ListBox>

  1. /// <summary>
  2. /// 菜单选择事件
  3. /// </summary>
  4. public RelayCommand<SelectionChangedEventArgs> SelectMenuCommand =>
  5. new Lazy<RelayCommand<SelectionChangedEventArgs>>(() =>
  6. new RelayCommand<SelectionChangedEventArgs>(SelectMenu)).Value;
  7. /// <summary>
  8. /// 选中菜单打开页面
  9. /// </summary>
  10. private void SelectMenu(SelectionChangedEventArgs e)
  11. {
  12. if (e.AddedItems.Count == 0) return;
  13. if (e.AddedItems[0] is MenuInfo item)
  14. {
  15. if (Equals(_selectedMenu, item)) return;
  16. _selectedMenu = item;
  17. DataList.Add(new TabControlModel
  18. {
  19. Header = item.Title,
  20. Url = item.Url
  21. });
  22. TabSelectedIndex = DataList.ToArray().Length - 1;
  23. }
  24. }

三、Image点击事件


  1. <Image x:Name="img_verifycode" Height="40" Margin="0,10,30,0" Source="{Binding VerifyCode}"></Image>
  2. <i:Interaction.Triggers>
  3. <i:EventTrigger EventName="MouseLeftButtonDown">
  4. <command:EventToCommand Command="{Binding ElementName=img_verifycode, Path=DataContext.SwitchVerifyCodeCommand}" />
  5. </i:EventTrigger>
  6. </i:Interaction.Triggers>

原文地址:https://www.cnblogs.com/lonelyxmas/p/12164917.html

时间: 2024-07-31 10:23:58

WPF MVVM COMMOND 传参的相关文章

WPF多窗口传参解决方案

在WPF中,我们的常常涉及到多个窗口之间传递参数的问题,那么该怎么传呢? 答:在窗口的构造函数中添加想要传递的参数.(我表达不好,请看下面代码.) 在主窗口中单机button打开一个新的子窗口. //主窗口类部分如下: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEve

WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参

原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的 不能绑父级,但是能绑资源 第一步:定义一个中间类用来做资源对象 1 public class BindingProxy : Freezable 2 { 3 #region Over

MvvmCross for WPF 支持子窗体显示、关闭、传参

最近在做 PCL(Portable Class Library)平台的项目,所以发一下自己遇到的问题 MvvmCross 是 PCL 平台的一个 MVVM 框架 地址:https://github.com/MvvmCross/MvvmCross 支持的平台: Silverlight for WP7, WP8 Mono for Android (or Xamarin.Android) MonoTouch for iOS (or Xamarin.iOS) the WinRT XAML framewo

WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)

到现在为止,我们创建了一个简单的MVVM的例子,包含了实现了的属性和命令.我们现在有这样一个包含了例如textbox类似的输入元素的视图,textbox用绑定来和view model联系,像点击button这样的行为用命令来联系.view model和model在内部通信. 但是在上面的架构中有一个问题,command类和view model有很严重的耦合.如果你记得command类的代码(在下面也有展示),在构造函数中传递view model对象,意味着这个command 类不能再其他的vie

[译]WPF MVVM 架构 Step By Step(5)(添加actions和INotifyPropertyChanged接口)

原文:[译]WPF MVVM 架构 Step By Step(5)(添加actions和INotifyPropertyChanged接口) 应用不只是包含textboxs和labels,还包含actions,如按钮和鼠标事件等.接下来我们加上一些像按钮这样的UI元素来看MVVM类怎么演变的.与之前的UI相比,这次我们加上一个"Cal Tax"按钮,当我们点击这个依赖于“sales amount”的按钮时,它会计算税费并显示在同窗口内. 为了完成所述的功能,我们先在Model类中添加一个

WPF MVVM学习

转自https://my.oschina.net/unpluggedcoder/blog/536301 简介 简单的三层架构示例和 GLUE(胶水)代码问题 第一步:最简单的 MVVM 示例 - 把后台代码移到类中 第二步:添加绑定 - 消灭后台代码 第三步:添加执行动作和"INotifyPropertyChanged"接口 第四步:在 ViewModel 中解耦执行动作 第五步:利用 PRISM WPF MVVM 的视频演示 简介 从我们还是儿童到学习成长为成年人,生命一直都在演变.

.NET Core 3 WPF MVVM框架 Prism系列之命令

原文:.NET Core 3 WPF MVVM框架 Prism系列之命令 本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的命令的用法 一.创建DelegateCommand命令# 我们在上一篇.NET Core 3 WPF MVVM框架 Prism系列之数据绑定中知道prism实现数据绑定的方式,我们按照标准的写法来实现,我们分别创建Views文件夹和ViewModels文件夹,将MainWindow放在Views文件夹下,再在ViewModels文件夹下面创建MainWi

jQuery与django传参

Get方式传参 Django中的代码如下: urls.py代码: from django.conf.urls import url from django.contrib import admin import AjaxTest.views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r"^index/$",AjaxTest.views.index), ] views.py代码: from django.http impo

spring jdbc传参及处理查询

传参有两种传参方式,一种直接传,一种通过对象传. 查询返回值,可以直接封进对象. public class springJdbcTest { private static JdbcTemplate jdbcTemplate; private static String uuid; @BeforeClass public static void init(){ ApplicationContext context = new ClassPathXmlApplicationContext("/spr