2

Viewmodel コマンドを Usercontrol のルーティング イベントにバインドしたいと考えています。ここに私が持っているものの詳細な説明があります。

Image1つ(画像を表示)と1つButtonButton削除する)のユーザーコントロールがありますImage。でユーザーコントロールを使用していListViewます。

私のユーザーコントロールのコードビハインドには、次のRoutedEventHandlerものを削除する必要がありImageます。

public event RoutedEventHandler RemoveImage;

このユーザーコントロールを使用するウィンドウに、次のように入力しました。

<uc:ucImageListItem x:Name="ImageListItem" RemoveImage="ImageListItem_RemoveImage"  />

画像を削除するコードが分離コードにある場合、このコードは正しく機能します。ViewmodelのコマンドをRemoveImage RoutedEventにバインドしたい。

おそらく好きです(正しくない)

<uc:ucImageListItem x:Name="ImageListItem" RemoveImage="{binding CommandtoRemove}"  />

これを達成する方法は?

RoutedCommandまたはに関連するものを見つけましDependancyPropertyたが、適切な方法、それらの使用方法が見つかりませんでした。

質問をさらに明確にする必要がある場合はお知らせください。ありがとうございます。

4

1 に答える 1

-1

こんにちは、このコードはコマンドを呼び出す方法を示しています: コマンド ハンドラ

public class CommandHandler : ICommand
{
    public CommandHandler(Action<object> action,Func<object,bool> canexecute)
    {
        _action = action;
        _canExecute = canexecute;

    }
    Action<object> _action;
    Func<object, bool> _canExecute;

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

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        _action(parameter);
    }
}

ビューモデル

public class MainViewModel
{
    private CommandHandler _buttonCommand;

    public CommandHandler ButtonCommand
    {
        get
        {
            return _buttonCommand ?? (_buttonCommand = new CommandHandler((param) => OnButtonCommand(param),(param)=>true));
        }
    }

    private void OnButtonCommand(object obj)
    {
        //DO things here whatever you want to do on Button click
    } 
}

意見

<Button Command="{Binding ButtonCommand}" Content="ok"/>

CommandHandler コンストラクターに 2 つのパラメーターを渡す必要があります。func が true と評価された場合にのみ、Command のアクションが実行されます。また、アクションの param と func は、上記の私のケースでは CommandParameter にバインドするものであり、CommandParameter をバインドしていないため、null になります。これが役立つことを願っています。

于 2013-02-26T06:38:21.173 に答える