2013-02-26 104 views
2

我想将Viewmodel命令绑定到Usercontrol的路由事件。 这里是我所拥有的详细解释。命令绑定到WPF中的路由事件用户控制

我有一个用户控制具有一个Image(其示出了图像)和一个在Button底部(Button以除去Image)。我在ListView中使用Usercontrol。

在我的用户控件的代码后面我有一个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}" /> 

如何实现这一目标?

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

让我知道是否需要进一步清除我的问题。 感谢预期。

+0

您是否使用任何MVVM框架? – 2013-02-26 05:40:57

+0

是的,我有经典的MVVM。 – Hardik 2013-02-26 05:42:03

+1

可能重复[WPF事件绑定从视图到ViewModel?](http://stackoverflow.com/questions/7877532/wpf-event-binding-from-view-to-viewmodel) – 2013-02-26 05:42:26

回答

-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,而第二个参数是必须返回bool的func。如果func的计算结果为true,那么命令行为就会被触发。而且,在我的情况下,绑定到CommandParameter的参数将会是null,因为我没有绑定CommandParameter.I希望这会有所帮助。

+0

感谢Post,我需要将命令绑定到Custom RoutedEvent of Usercontrol,即 。当'RemoveImage'自定义事件被调用时,我需要调用命令。 – Hardik 2013-02-26 06:49:33

+0

你有.cs中的事件,你在.cs中有处理程序,那么为什么你希望它通过Command.Search来处理网络上的继电器命令,他们让你通过Command将事件绑定到VM。但是为了你将处理器VM。 – ethicallogics 2013-02-26 07:03:04