Windows Phone 8等效于Android StartActivityForResult

时间:2013-05-16 13:52:11

标签: android xaml windows-phone-8

我来自Android背景,正在进入Windows Phone 8。

我有一个使用相机解码QR码的页面,这很好用。在Android中,我将使用Intent StartActivityForResult启动此活动,然后会将解码后的值返回给原始活动。

我已经搜索过但在Windows Phone 8中找不到明显的等价物。我现在的想法是导航到调用页面,其中包含一个包含解码值的查询字符串并改变后台堆栈,但这看起来有点凌乱

问题

是否有与android中的进程等效的内容,如果有,那么有人可以概述方法,以便我可以看到它的实际效果吗?

1 个答案:

答案 0 :(得分:2)

首先,在WP8中没有这样的东西,所以你需要一个解决方法。解决方法可能有所不同,链接的问题(和答案)是潜在的方法之一。我个人这样做有点不同。我将在这里描述我当前项目的架构,虽然它可能不适用于您的情况,因为我的应用程序非常庞大并且结构复杂。但我会尝试解释它如何适用于您的情况。

特别是,我当前的应用程序包含所谓的服务(只是我的名字,而不是标准的服务)。那些具有不同的范围(一些用于1页,一些用于应用程序是全局的),不同的生命周期等等。从本质上讲,每个服务都是一个实现定义良好的接口的类,以便其他服务可以使用它。

接下来,服务可能相互依赖。我正在使用Ninject框架进行依赖注入。从本质上讲,如果服务A依赖于服务B,则会产生如下代码:

public class B : IB
{
...
}
public class A
{
    IB b;
    public A(IB b)
    {
        this.b = b;
    }
}

其中IB是服务B实现的接口。

然后我有视图模型(是的,我正在使用MVVM,如果你想构建一个相当大的WP8应用程序,你可能也应该这样做)。 View模型正在使用服务来执行应用程序功能。某些服务由多个视图模型使用。例如,我有一个服务从Web获取一些数据,并通过定期轮询使其保持最新。该Web数据用于应用程序的多个页面,因此应在不同的视图模型之间共享。它是通过依赖注入再次实现的,因此所有感兴趣的视图模型都接受此服务实例作为构造函数参数。

public class MainPageViewModel : INotifyPropertChanged
{
    private string webData;
    public MainPageViewModel(IWebDataService service)
    {
        webData = service.CurrentWebData;
        service.WebDataChanged += (o, e) => webData = service.CurrentWebData;
    }
    ...
}

public class DetailPageViewModel : INotifyPropertChanged
{
    private string webData;
    public DetailPageViewModel(IWebDataService service)
    {
        webData = service.CurrentWebData;
        service.WebDataChanged += (o, e) => webData = service.CurrentWebData;
    }
    ...
}

public class WebDataService : IWebDataService
{
    public string CurrentWebData;
    public event EventHandler WebDataUpdated;
    ...
}

Ninject允许我实例化IWebDataService的单个实例,因此main和details页面共享相同的实例。更新Web数据时,会触发一个事件,以便两个视图模型都可以更新其Web数据实例,并将这些新数据推送到视图中。

所以这就是我的表现方式。您可能会重用此体系结构的某些部分,例如让某个类的单例实例可以通过不同的页面访问。一个页面将一些新数据放入该单例实例,并且,当更新数据时(事件触发或在构造期间,如果垃圾收集器有足够的时间来终止现有页面和/或视图模型实例),另一页面将读取更新的数据。这就是他们分享的方式。

如果您希望我深入了解某些主题的详细信息,请随时在评论中提问。 Android开发人员不仅欢迎使用Windows Phone。 :)