【发布时间】:2011-03-19 18:25:40
【问题描述】:
有没有办法将 BackKeyPressed 事件连接到视图中的命令 (XAML)?我正在使用 MVVM Light。
我有几个可能会显示的登录/注册屏幕。如果他们在登录/注册过程中,这只是显示/隐藏用户控件,我希望能够拦截后退按钮,以便显示/隐藏适当的控件。
【问题讨论】:
标签: xaml windows-phone-7 mvvm-light
有没有办法将 BackKeyPressed 事件连接到视图中的命令 (XAML)?我正在使用 MVVM Light。
我有几个可能会显示的登录/注册屏幕。如果他们在登录/注册过程中,这只是显示/隐藏用户控件,我希望能够拦截后退按钮,以便显示/隐藏适当的控件。
【问题讨论】:
标签: xaml windows-phone-7 mvvm-light
请注意,我不熟悉 WP7 开发,但我相信 MVVM Light 可以类似地处理 WPF4 和 WP7:
<PhoneApplicationPage
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7"
xmlns:Interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<Interactivity:Interaction.Triggers>
<Interactivity:EventTrigger
EventName="BackKeyPress">
<Command:EventToCommand
Command="{Binding BackKeyPressCommand}" />
</Interactivity:EventTrigger>
</Interactivity:Interaction.Triggers>
</PhoneApplicationPage>
【讨论】:
BackKeyPressCommand = new RelayCommand<CancelEventArgs>( BackKeyPress );,但是当它遇到BackKeyPress方法时,事件参数是null。
e.Cancel = true;。
PassEventArgsToCommand="True" 添加到EventToCommand。
您可能可以通过编写自己的 BasePage 类来做到这一点,该类继承自 PhoneApplicationPage 并公开一个公共事件,然后在 override OnBackKeyPress 方法中触发该事件
然后,在您的自定义页面中,您可以继承新的 BasePage 类而不是 PhoneApplicationPage,然后有望将该事件绑定到 XAML 中的命令。
但是,在这种特殊情况下,我想我可能会倾向于使用 C# 而不是 XAML - 例如直接在 OnBackKeyPress 中调用 Execute
【讨论】: