Silverlight Galasoft RelayCommand未启动

Silverlight Galasoft RelayCommand未启动,silverlight,mvvm,mvvm-light,relaycommand,Silverlight,Mvvm,Mvvm Light,Relaycommand,我正在使用MVVM Light框架构建SL4应用程序。我的简单应用程序主要由一个主视图(shellView)组成,它被划分为多个用户控件。它们只是UI的方便分离,因此它们没有自己的ViewModel ShellView包含一个小键盘(自定义用户控件),其中包含多个键盘按钮(自定义用户控件) 我非常确定(因为我已经检查过)DataContext设置正确,并且它被层次结构中的所有UserControl使用。(ShellView的Datacontext是ShellViewModel,Keypad的Da

我正在使用MVVM Light框架构建SL4应用程序。我的简单应用程序主要由一个主视图(shellView)组成,它被划分为多个用户控件。它们只是UI的方便分离,因此它们没有自己的ViewModel

ShellView包含一个小键盘(自定义用户控件),其中包含多个键盘按钮(自定义用户控件)

我非常确定(因为我已经检查过)DataContext设置正确,并且它被层次结构中的所有UserControl使用。(ShellView的Datacontext是ShellViewModel,Keypad的Datacontext是ShellViewModel,等等)

在ShellViewModel中,我有一个名为“ProcessKey”的ICommand(RelayCommand)

在键盘控制中,我有如下功能:

<controls:KeypadButton x:Name="testBtn" Text="Hello">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding PressStandardKeyCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
</controls:KeypadButton>
现在,如果我在innerButton\u Click的主体上设置一个断点,我可以看到Click被正确捕获,并且它包含指向RelayCommand的点。但是,什么也没有发生:“Click(sender,new keypadbuttonneventargs());”被执行,但没有更多

为什么会这样?不应执行RelayCommand中定义的目标函数?可能是与范围相关的问题

提前感谢,, 干杯
Gianluca。

路由事件的定义如下():


如其他评论所述,这可能与
单击事件不是
路由事件有关

作为一种快速黑客,您可以使用
MouseLeftButtonDown
而不是
UserControl
上的
Click
事件

<!-- Kinda Hacky Click Interception -->
<controls:KeypadButton x:Name="testBtn" Text="Hello">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonDown">
                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding PressStandardKeyCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
</controls:KeypadButton>


您可以考虑的另一个选项是从<代码>按钮>代码>继承而不是<代码> UserControl < /代码>。Silverlight Show有一个可能与此相关的解决方案。

正如我在帖子中所说,我正在使用SL4。据我所知,那里没有EventManager。我错了吗?我试图将我的自定义事件处理程序声明为RoutedEventHandler,但仍然存在相同的问题。我可以看到Click事件中有一个EventTriggerBase实例,但是当它实际被调用时,什么也没有发生。任何帮助都将不胜感激!谢谢大家!抱歉,我不知道您正在使用SL(下次需要更好地阅读)。根据本文(),SL中不支持自定义路由事件。为什么不在控件上实现ICommand?然后问题就解决了。+1,特别是关于继承您需要的内容的部分,而不是从Control/UserControl继承下来的部分-除非绝对需要。@Alex:谢谢,但我相信我们没有抓住要点。另外,我已经试过使用MouseLeftButtonUp(应该是相同的),但它不起作用。KeypadButton的事件被生成,我可以通过代码以编程方式订阅它。问题似乎是EventTrigger无法捕获生成的事件。我在这里发布这个问题是为了了解silvelright usercontrols中的自定义事件是否需要以某种特定的方式实现,以便在XAML和EventToCommand中工作。
public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
    "Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButtonSimple));

// Provide CLR accessors for the event
public event RoutedEventHandler Tap
{
        add { AddHandler(TapEvent, value); } 
        remove { RemoveHandler(TapEvent, value); }
}
<!-- Kinda Hacky Click Interception -->
<controls:KeypadButton x:Name="testBtn" Text="Hello">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonDown">
                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding PressStandardKeyCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
</controls:KeypadButton>