1

この記事のコードを実装しました: http://wblo.gs/YvF。すべてが期待どおりに機能しますが、イベントが発生したときにイベント ハンドラーに渡された Arguments にアクセスする方法がわかりません。command パラメータがあることは知っていますが、それを使用して 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}" ...

これに関する助けをいただければ幸いです。ありがとう!

4

1 に答える 1

1

これは未検証ですが、

  • 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> 
于 2012-05-28T16:41:53.973 に答える