本节使用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
重新生成项目,点击按钮,即可实现效果。
标签:ICommand,MVVM,private,具体,func,action,parameter,public From: https://www.cnblogs.com/xwzyac/p/18089152