gpt4 book ai didi

wpf - 命令行为附件参数

转载 作者:行者123 更新时间:2023-12-03 10:39:20 26 4
gpt4 key购买 nike

我已经在本文中实现了代码:http://wblo.gs/YvF。一切都按预期工作,但我不知道如何在事件触发时访问传递给事件处理程序的Arguments。我知道有命令参数,但是如何使用它来访问EventArgs?这是我实现的代码...

DragEnter类别

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

public class DragEnter : Attachment<Control, DragEnterBehavior, DragEnter>
{
private static readonly DependencyProperty behaviorProperty = Behavior();
public static readonly DependencyProperty CommandProperty = Command(behaviorProperty);
public static readonly DependencyProperty CommandParameterProperty = Parameter(behaviorProperty);

public static void SetCommand(Control control, ICommand command) { control.SetValue(CommandProperty, command); }
public static ICommand GetCommand(Control control) { return control.GetValue(CommandProperty) as ICommand; }
public static void SetCommandParameter(Control control, object parameter) { control.SetValue(CommandParameterProperty, parameter); }
public static object GetCommandParameter(Control buttonBase) { return buttonBase.GetValue(CommandParameterProperty); }
}

DragEnterBehavior类别
using System.Windows.Controls;
using Microsoft.Practices.Prism.Commands;

public class DragEnterBehavior : CommandBehaviorBase<Control>
{
public DragEnterBehavior(Control selectableObject)
: base(selectableObject)
{
selectableObject.DragEnter += (sender, args) => ExecuteCommand();
}
}

实现守则
public ICommand EditItemCommand
{
get
{
if (editItemCommand == null)
editItemCommand = new RelayCommand(param => EditItemControl(), pre => IsItemEditButtonEnabled());

return editItemCommand;
}
}

public void EditItemControl()
{
...
ChangedView(itemEditorViewModel);
}

<ListBox Behaviors:DragEnter.Command="{Binding EditItemCommand}" ...

任何帮助,将不胜感激。谢谢你!

最佳答案

这未经测试,但是

  • 将您的DragEnterBehaviour更改为
    public class DragEnterBehavior : CommandBehaviorBase<Control>
    {
    public DragEnterBehavior(Control selectableObject)
    : base(selectableObject)
    {
    selectableObject.DragEnter += (sender, args) =>
    {
    CommandParameter = args;
    ExecuteCommand();
    };
    }
    }
  • 将您的RelayCommand(我假设这是来自MVVM Light)更改为
    public ICommand EditItemCommand 
    {
    get
    {
    if (editItemCommand == null)
    editItemCommand = new RelayCommand<DragEventArgs>(
    EditItemControl, IsItemEditButtonEnabled);

    return editItemCommand;
    }
    }

    public void EditItemControl(DragEventArgs args)
    {
    ...
    }

  • 如果您使用的是MVVM Light,则可以达到以下相同的结果:
    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="DragEnter">
    <cmd:EventToCommand Command="{Binding DragEnterCommand}"
    PassEventArgsToCommand="True" />
    </i:EventTrigger>
    </i:Interaction.Triggers>

    关于wpf - 命令行为附件参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10785652/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com