我正在使用这个(MVVM)Windows 8.1 metro应用程序,我正在使用我单独构建的UserControl
,这个UserControl
有自己为它构建的事件。
我的问题是:当我尝试在全局应用程序中使用命令时,他们永远不会触发,尽管事件有效!
UserControl
及其事件:
public delegate void PlayClickedEventHandler(object sender, RoutedEventArgs e);
...
public event PlayClickedEventHandler PlayClicked;
单击PlayClicked
内的按钮时会触发UserControl
事件
private void PlayButton_OnClick(object sender, RoutedEventArgs e)
{
if (PlayClicked != null)
PlayClicked(this, e);
}
全局Windows 8.1 MVVM应用程序:
观点:
<mediaPlayerControl:PlayerControl x:Name="UserControl">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="PlayClicked">
<core:InvokeCommandAction Command="{Binding OnPlayClicked, Mode=TwoWay}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</mediaPlayerControl:PlayerControl>
ViewModel:
public RelayCommand OnPlayClicked { get; set; }
OnPlayClicked = new RelayCommand(() =>
{
//Stuff to do here that seem not to be done
});
我错过了什么吗?
答案 0 :(得分:1)
我想这可以解释一下(来自EventTriggerBehavior
上的文档)
支持以下事件:
(11个事件清单)
考虑实施自定义行为以响应其他事件。
为什么不使用EventTrigger
呢? (另请注意,“OnPlayClicked”绑定应该是单向的,尽管不应该有所作为。)
<mediaPlayerControl:PlayerControl x:Name="UserControl">
<interactivity:Interaction.Triggers>
<uixaml:EventTrigger EventName="PlayClicked">
<core:InvokeCommandAction Command="{Binding OnPlayClicked}"/>
</uixaml:EventTrigger>
</interactivity:Interaction.Triggers>
</mediaPlayerControl:PlayerControl>