Windows Phone 8.1-如何处理硬件返回按钮GoBack with a Parameter返回上一页
本文关键字:按钮 返回 硬件 GoBack with 返回上一页 Parameter 处理 Phone 何处理 Windows | 更新日期: 2023-09-27 18:19:36
我有一个Windows Phone 8.1应用程序。
在一个页面上,当用户点击硬件后退按钮时,我想导航回上一页,但也想向上一页发送一个参数。但是GoBack函数不接受任何参数。如何将参数传回上一页?
这就是我目前如何处理硬件后退按钮
在我看来,构造函数
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
事件处理程序
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
}
如果有人能为我指明正确的方向,我将非常高兴。提前感谢。
我使用singleton模式解决了这个问题,我创建了一个所有移动页面都能看到的控制器类,并通过它传递消息。希望这个答案能帮助你
根据应用程序/项目的架构,有多种方法可以正确处理此问题。以下是几种可能的解决方案:
1-App.xaml.cs上的公共(静态)属性对象。这样你就可以从任何地方设置对象,并从任何地方读取它。
public sealed partial class App : Application
{
............
public static SomeType SomeObjectIPreferToShareAcrossApp { get; set; }
............
}
然后是你的反向定价处理程序:
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack)
{
App.SomeObjectIPreferToShareAcrossApp = this.someObjectIHaveOnlyOnThisPage;
rootFrame.GoBack();
e.Handled = true;
}
}
然后,当你导航到一个页面时,检查该对象是否已设置,读取并重置
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.NavigationMode == NavigationMode.Back)
{
if (App.SomeObjectIPreferToShareAcrossApp != null)
{
// yay, do something :)
App.SomeObjectIPreferToShareAcrossApp = null;
}
}
}
我相信有些人会反对这种分享方式,因为它可能容易出错,而且很难看。
2-某种事件聚合器实现,这意味着您从发布者向所有订阅者发布/发送特定消息或对象。
3-共享ViewModel实例
还有其他方法,但这取决于你的项目/应用程序的架构。
创建一个具有以下内容的类:
using System;
namespace SimpleMVVM.Model
{
public class Customer
{
public int CustomerID
{
get;
set;
}
public string FullName
{
get;
set;
}
public string Phone
{
get;
set;
}
}
}
然后,您可以通过页面分配/获取这些变量,而不是在页面之间发送变量。
您必须像这样控制e.Handled
:
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null && rootFrame.CanGoBack && !e.Handled)
{
rootFrame.GoBack();
e.Handled = true;
}
如果不控制为e.Handled
,则HardwareButtons.BackPressed
事件将继续向后堆栈。