WPF实现更加灵活绑定复杂Command(使用Microsoft XAML Behaviors 库)

这篇具有很好参考价值的文章主要介绍了WPF实现更加灵活绑定复杂Command(使用Microsoft XAML Behaviors 库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、安装NuGet

        WPF实现更加灵活绑定复杂Command(使用Microsoft XAML Behaviors 库),wpf,microsoft

2、在XAML的命名空间引入:

xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

3、使用(这里是设置了一个Canvas的点击事件,其它面板也是类似这样设置):

<Canvas Background="Aqua">
    <Rectangle Stroke="Red" 
               Width="{Binding RectModel.RectangleWidth}" 
               Height="{Binding RectModel.RectangleHeight}" 
               Canvas.Left="{Binding RectModel.RectangleLeft}" 
               Canvas.Top="{Binding RectModel.RectangleTop}"/>
    <i:Interaction.Triggers>
        <!--EventName是Command指定的Action-->
        <i:EventTrigger EventName="MouseDown">
            <i:InvokeCommandAction Command="{Binding MouseDownCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Canvas>

        --我这里的ViewModel部分是这样子的

public SimpleCommand MouseDownCommand { get; private set; }   
// 构造方法中初始化
MouseDownCommand = new SimpleCommand { DoExecute = new Action<object>(MouseDown) };


/// <summary>
/// 鼠标按下的命令执行逻辑
/// </summary>
/// <param name="obj"></param>
/// <exception cref="NotImplementedException"></exception>
private void MouseDown(object obj)
{
    Debug.WriteLine("触发Canvas的MouseDown命令");
}


/// SimpleCommand类是这样的:
public class SimpleCommand : ICommand
{
    public event EventHandler CanExecuteChanged;
    public Action<object> DoExecute { get; set; }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        if (DoExecute != null)
        {
            DoExecute(parameter);
        }
    }
}

4、这样就可以在ViewModel中直接给这个Command内容了,不用像之前那么麻烦地绑定Command了,这样更加清晰,Command也可以有花样地组合

补充:

在Border中使用:

<b:Interaction.Triggers>
    <b:EventTrigger EventName="MouseLeftButtonDown">
        <!--基于命令-->
        <!--<b:InvokeCommandAction Command="{Binding MouseDownCommand}" PassEventArgsToCommand="True"></b:InvokeCommandAction>-->
        <!--基于方法-->
        <b:CallMethodAction TargetObject="{Binding}" MethodName="DoMouseLeftButtonDown"/>
    </b:EventTrigger>
</b:Interaction.Triggers>

基于命令中的:这个PassEventArgsToCommand起到的作用就是将触发事件的参数传递给绑定的Command。(可以获取鼠标点击位置啊这些)

基于方法的:MethodName中的就是ViewModel里面的方法

这里的Interaction.Triggers是附加属性

InvokeCommandAction和CallMethodAction都是附加行为:<b:Interaction.Triggers> 添加了一个事件触发器(EventTrigger),当指定的事件发生时(在这里是 MouseLeftButtonDown),执行特定的动作(InvokeCommandAction),这是一个典型的附加行为。文章来源地址https://www.toymoban.com/news/detail-759378.html

到了这里,关于WPF实现更加灵活绑定复杂Command(使用Microsoft XAML Behaviors 库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF MvvM框架(MvvMLight,Microsoft Toolkit Mvvm,CommunityToolkit.Mvvm;鼠标,键盘,手写等事件绑定如:抬起按下事件)

    目录 1.MvvMLight(已废弃) 2. Microsoft Toolkit Mvvm(已废弃)  3.CommunityToolkit.Mvvm框架 4.Mvvm中的事件绑定 4.1 DataGrid表中按钮点击事件 4.2 绑定 鼠标事件,键盘事件,手写笔事件,多点触控事件 5.和PLC设备建立联系(联调)    本文中,继承接口,同步数据方法,command用法均一致; 1.继

    2024年02月04日
    浏览(60)
  • 【Android】使用 `reactor.core.scheduler.Schedulers` 提供的线程池让开发者更加灵活地执行任务

    在 Android 开发中,使用 reactor.core.scheduler.Schedulers 提供的线程池可以让开发者更加灵活地执行任务,并且可以根据具体情况选择最合适的线程。 下面列举几种常用的线程池和其适用场景: Schedulers.single() :该调度器会使用单个线程来执行任务,适用于需要按照先后顺序依次执

    2024年02月09日
    浏览(58)
  • Python Fire:更加灵活的命令行参数

    之前介绍过 Python 的 Fire 库,一个用来生成命令行工具的的库。 请参考:Python Fire:自动生成命令行接口 今天,针对命令行参数,补充两种更加灵活的设置方式。 *args 型的参数可以接受任意长度的参数。 比如,模拟一个学校发送通知的功能: 使用起来很灵活, 从上面使用的

    2024年02月19日
    浏览(37)
  • C#WPF命令Command使用实例

    本文实例演示C#WPF命令使用实例 定义: 命令(Command):命令表示一个任务单元,并且可跟踪该任务的状态,实际上是实现了ICommand接口的类。然而,命令实际上可以包括任务执行的逻辑代码,也可以不包括从而仅作为联系命令源与命令目标的媒介。比如,WPF 默认的接口实现

    2024年02月07日
    浏览(34)
  • WPF 如何实现事件绑定 (MVVM)

    首先说到绑定,一般是在WPF 中常见的,因为WPF中有一个比较好用的框架叫做 MVVM 所以View层的按钮等元件的的动作都是需要和后台ViewModel 中的函数进行绑定的。 如 我们最常见的按钮的command 绑定 这里面的command 是命令,不是事件 如果点击图片,或者按钮抬起来的时候需要触

    2024年02月04日
    浏览(53)
  • 【Python】Python 用mixin模式让程序更加灵活

    在理解mixin之前,有必要先重温一下模板方法模式。所谓的模板方法模式就是在一个方法中定义一个算法的骨架,并将一些实现步骤延迟到子类中。模板方法可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。在这里,算法也可以理解为行为。 模板方法模式

    2024年02月10日
    浏览(35)
  • WPF .Net6框架下, 使用 Microsoft.Xaml.Behaviors.Wpf 的Interaction.Triggers特性,实现ComboBox 在展开时,触发刷新列表内容的动作

    ComboBox 在WPF中是常见的控件。 一般情况下,在绑定好数据源后,其内容是固定的。 当然,你也可以实时刷新,但这将带来较高的资源消耗。 因此有个折中的办法: 只在它在展开时,自动更新列表内容。 当前文章基于 .Net6框架,其他框架不适用。 这个是用于平替winform某个组

    2024年02月09日
    浏览(56)
  • 如何让WPF中的ValidationRule实现参数绑定

    应用开发过程中,常常会对用户输入内容进行验证,通常是基于类型、范围、格式或者特定的要求进行验证,以确保输入符合预期。例如邮箱输入框校验输入内容是否符合邮箱格式。在WPF中,数据模型允许将 ValidationRules 与 Binding 对象关联,可以通过继承 ValidationRule 类并重写

    2024年02月12日
    浏览(41)
  • WPF浮窗Popup控件与命令Command简单使用

    上面是WPF前端代码,其中图片Image要自己在项目下新建一个Resource文件夹把图片添加进去,WPF后台窗体代码为: 在另外新建一个类,俗称MVVM模式中的VM文件,文件暂时命名为MainWindowVM,类文件内容如下: 值得注意的是要引用包CommonServiceLocator,操作如下:右击项目名-属性-NuGet管理包,检索包

    2024年02月07日
    浏览(43)
  • WPF 查看绑定错误——Snoop 的基本使用

    可以通过 Snoop 查看 WPF 程序的 Visual Tree,更多介绍请看 snoopwpf 一、下载 snoopwpf.msi 安装后打开,选择自己的程序,点击 snoop(望远镜) 二、筛选 点击左侧下拉列表,选择 Show only elements with binding errors 三、点击出错的节点,右侧点击 Properties,然后滚动表格,找到标红的一行

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包