我使用自己的自定义事件构建了自己的UserControl(我使用自己的自定义事件),在父项目中我希望将这些事件与命令一起使用,因为它是 MVVM < / strong>应用程序,全部使用Behaviors SDK (XAML) for Visual Studio 2013,如下所示:
<mediaPlayerControl:PlayerControl>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ForwardClicked">
<core:InvokeCommandAction Command="{Binding OnForwardClicked, Mode=TwoWay}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</mediaPlayerControl:PlayerControl>
问题是EventTriggerBehavior只支持一些特定事件here,因此我在事件中使用的命令不会触发,现在,我想要做的是,构建行为,提供相同的体验,并支持我自己的事件:我希望它们看起来像这样:
<mediaPlayerControl:PlayerControl>
<interactivity:Interaction.Behaviors>
<core:ExtensionsEventTriggerBehavior EventName="ForwardClicked">
<core:ExtensionsInvokeCommandAction Command="{Binding OnForwardClicked, Mode=TwoWay}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</mediaPlayerControl:PlayerControl>
我已经阅读了很多关于实现此类行为的文章,但我无法清楚地告诉我,因为这是我第一次以这种方式处理它们,我想如果你告诉我该怎么做。
答案 0 :(得分:0)
首先,你通常不会在UserControls XAML页面中添加行为,你会在XAML页面上添加使用UserControl的行为,所以我认为你需要这样的东西:
您只需添加EventHandler
类型的公开活动,例如&#34; ForwardButtonClicked&#34;您的UserControl的Codebehind:
public event EventHandler ForwardButtonClicked;
然后,您还必须添加EventHandler方法,以便在视图上单击按钮时触发事件。所以你要在usercontrol的构造函数中添加一个eventhandler方法:
public PlayerControl()
{
this.InitializeComponent();
_forwardButton.Click += this.ForwardButtonClickedEventHandler;
}
Eventhandler看起来像:
private void ForwardButtonClickedEventHandler(object sender, RoutedEventArgs eventArgs)
{
if(this.ForwardButtonClicked != null)
{
this.ForwardButtonClicked.Invoke(sender, new EventArgs());
}
}
然后,您可以将UserControl添加到XAML页面,并为UserControl的ForwardButtonClicked事件添加EventTriggerBehavior。 由于WinRT中不支持Custom RoutedEvents,因此您可能使用默认单击的RoutedEventHandler而不是普通的C#EventHandler,因为您没有事件的冒泡和隧道。但我不知道这是否有效,我没有尝试,因为我还不需要泡泡或隧道。 如果有人有更好的解决方案,我将非常感谢阅读它。