命令绑定到WPF用户控件中的路由事件

时间:2013-02-26 05:31:18

标签: wpf mvvm user-controls wpf-controls commandbinding

我想将Viewmodel命令绑定到Usercontrol的路由事件。 以下是我所拥有的详细解释。

我有一个用户控件,其中一个Image(显示图片)和一个Button在底部(Button删除Image)。我在ListView中使用了Usercontrol。

在我的Usercontrol代码后面,我有RoutedEventHandler删除Image

public event RoutedEventHandler RemoveImage;

在我使用此Usercontrol的窗口中,我放了:

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

如果我删除图片的代码在代码后面,则此代码可以正常工作。但我想将Viewmodel的命令绑定到RemoveImage RoutedEvent。

可能喜欢(不正确)

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

如何实现这一目标?

我找到了与RoutedCommandDependancyProperty相关的内容,但找不到任何正确的方法,如何使用它们。

如果我需要进一步澄清我的问题,请告诉我。 感谢您的期待。

1 个答案:

答案 0 :(得分:-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构造函数一个是要在Command上触发的Action,第二个param是必须返回bool的func。如果func的计算结果为true,那么命令的动作就会被触发。动作中的参数和func是你将在上面的例子中绑定到CommandParameter的东西,它将为null,因为我没有绑定CommandParameter。我希望这会有所帮助。