zoukankan      html  css  js  c++  java
  • MVVM开发模式MVVM Light Toolkit中使用事件和参数传递

    Light中定义了类GalaSoft.MvvmLight.Command.RelayCommand

    这个类继承了ICommand方法,实现了其中的方法,Action就是一个方法参数

    // 摘要:
        //     A command whose sole purpose is to relay its functionality to other objects
        //     by invoking delegates. The default return value for the CanExecute method
        //     is 'true'. This class does not allow you to accept command parameters in
        //     the Execute and CanExecute callback methods.
        public class RelayCommand : ICommand
        {
            // 摘要:
            //     Initializes a new instance of the RelayCommand class that can always execute.
    
            public RelayCommand(Action execute);
            //
            // 摘要:
            //     Initializes a new instance of the RelayCommand class.
    
            public RelayCommand(Action execute, Func<bool> canExecute);
    
            // 摘要:
            //     Occurs when changes occur that affect whether the command should execute.
            public event EventHandler CanExecuteChanged;
    
            // 摘要:
            //     Defines the method that determines whether the command can execute in its
            //     current state.
    
            [DebuggerStepThrough]
            public bool CanExecute(object parameter);
            //
            // 摘要:
            //     Defines the method to be called when the command is invoked.
    
            public void RaiseCanExecuteChanged();
        }

    做一个简单的导航事件

    从MainView导航到View1,

    在View1的Viewmodel中定义这个事件属性

     public RelayCommand GotoView1
            {
                get;
                set;
            }

    在构造函数中赋值给GotoView1

     GotoView1 = new RelayCommand(delegate {
                    System.Windows.MessageBox.Show("Go to View1");
                });

    //或者定义一个单独的方法  GotoView1 = new RelayCommand( ()=>GoToView1());

    然后在MainPage.xaml中绑定事件

      <HyperlinkButton x:Name="View1" Grid.Row="1" Content="Go to View1" Command="{Binding GotoView1}" ></HyperlinkButton>

    参数传递。

    定义事件的时候很多情况下都需要传入参数,MVVM light也有这功能,而且 比较简单,方式如下:

    //<string>这个就是GotoView1方法需要的参数,参数类型是string,当然可以根据需要变成其他类型,实体类型都可以

    public RelayCommand<string> GotoView1 { get; set; }

      public void GoToView11(string msg)
      {
             System.Windows.MessageBox.Show(msg + "Go to View1");
      }

    //对这个方法属性赋值,test只是形式参数,无任何意义,意思是把字符串类型的test传递给GotoView方法
    GotoView1 = new RelayCommand<string>((test) => GoToView11(test));


    页面上绑定这个方法的时候可以指定CommandParameter来指定Command的绑定方法的参数,如果类型是字符串,直接="字符串"就可以

    如果是其他实体类型可以参考使用Binding语法CommandParameter="{Binding SelectedItem, ElementName=集合控件}"

                <HyperlinkButton x:Name="View1" Grid.Row="1" Content="Go to View1" Command="{Binding GotoView1}" CommandParameter="Hello" ></HyperlinkButton>
  • 相关阅读:
    .NET Core前后端分离快速开发框架(Core.3.0+AntdVue)
    关于框架
    什么是 https ?这应该是全网把 https 讲的最好的一篇文章了
    NET手撸绘制TypeScript类图——下篇
    及时发现问题,力争找到更好的解决办法,而不是得过且过
    一个命令永久禁用Win10驱动程序强制签名
    表达式的结果为true或false
    Parcel 搭建浏览器自动刷新的 非 SPA项目
    Gulp 搭建前端非SPA 项目, 修改文件浏览器自动刷新
    vue 里 this.$parent 作用
  • 原文地址:https://www.cnblogs.com/zjypp/p/2479135.html
Copyright © 2011-2022 走看看