MVVM中ICommand的具体使用

本节使用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

 

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

 

posted @ 2024-03-22 11:59  行稳致远ac  阅读(107)  评论(0)    收藏  举报