【问题标题】:Hook Up Command for BackKeyPress in XAMLXAML 中 BackKeyPress 的挂钩命令
【发布时间】:2011-03-19 18:25:40
【问题描述】:

有没有办法将 BackKeyPressed 事件连接到视图中的命令 (XAML)?我正在使用 MVVM Light。

我有几个可能会显示的登录/注册屏幕。如果他们在登录/注册过程中,这只是显示/隐藏用户控件,我希望能够拦截后退按钮,以便显示/隐藏适当的控件。

【问题讨论】:

    标签: xaml windows-phone-7 mvvm-light


    【解决方案1】:

    请注意,我不熟悉 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&lt;CancelEventArgs&gt;( BackKeyPress );,但是当它遇到BackKeyPress方法时,事件参数是null
    • 我想在命令触发时取消事件e.Cancel = true;
    • 只需将PassEventArgsToCommand="True" 添加到EventToCommand
    【解决方案2】:

    可能可以通过编写自己的 BasePage 类来做到这一点,该类继承自 PhoneApplicationPage 并公开一个公共事件,然后在 override OnBackKeyPress 方法中触发该事件

    然后,在您的自定义页面中,您可以继承新的 BasePage 类而不是 PhoneApplicationPage,然后有望将该事件绑定到 XAML 中的命令。

    但是,在这种特殊情况下,我想我可能会倾向于使用 C# 而不是 XAML - 例如直接在 OnBackKeyPress 中调用 Execute

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 2016-02-27
      • 1970-01-01
      • 2016-01-08
      • 2017-10-20
      • 1970-01-01
      • 2023-03-07
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多