Android的StartActivityForResult在Windows Phone 8中的等效功能是什么?

3

我来自Android背景,正在转向Windows Phone 8。

我有一个使用相机解码QR码的页面,它能正常工作。在Android中,我会使用Intent的StartActivityForResult方法,然后把解码后的值返回到原始Activity。

我已经搜索过,但是在Windows Phone 8中没有发现明显的等价物。我目前的想法是通过查询字符串导航到调用页面,并包含解码值,然后更改返回堆栈,但这似乎有点混乱。

问题

是否有与Android中相同的过程?如果有,可以有人概述一下方法,让我看到它的实际操作吗?


关于 Intent.PutExtra 怎么样? - jimpanzer
我想要Windows的等效版本,而不是Android。 - Graham Smith
好的,你用MVVM模式吗?还是其他的模式? - jimpanzer
我目前还没有使用MVVM模型,但我愿意研究任何解决方案,因为我相信有几个选择。 - Graham Smith
请尝试访问 https://dev59.com/yW855IYBdhLWcg3wy3kb。希望对您有所帮助。 - jimpanzer
1个回答

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应用程序,你也应该这样做)。视图模型使用服务执行应用程序功能。一些服务被多个视图模型使用。例如,我有一个服务从网上获取一些数据,并通过定期轮询保持数据最新状态。这些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的单一实例,以便主页面和详细页面共享它的相同实例。当Web数据更新时,会触发事件,以便两个视图模型可以更新其Web数据实例,并将此新数据推送到视图中。
以下是我的做法。您可以潜在地重用某些部分,例如拥有某个类的单例实例,可被不同页面访问。一个页面向该单例实例添加一些新数据,并且当数据更新时(事件被触发或在构建期间,如果垃圾收集器有足够的时间来杀死现有页面和/或视图模型实例),另一页读取更新后的数据。这就是它们共享的方式。
如果您想深入了解某个主题,请随时在评论中提问。欢迎Android开发人员加入Windows Phone的行列 :)

哇,真是个好回复,感谢你的态度和质量。我发现在不同平台之间移植并不太痛苦,而且我更喜欢VS比Eclipse。我了解一些MVVM,所以我想这个周末我有一些作业要做了。 - Graham Smith
Visual Studio 真的很不错,赞同。多年前我曾经用 Eclipse 进行 Symbian 开发,也还算可以,但不如 Visual Studio 优秀。然而,在 WP 开发中最好的东西就是 C# 语言了,在我看来。从 Java 转换过来,希望你也会觉得它很棒 :) - Haspemulator
笑] 如果我不完全同意,Haspemulator,我会说你是微软的代言人。不幸的是,由于我的WP8应用程序足够受欢迎,让我想要更大的市场,所以我正在往另一个方向发展。我能问一下你在手机上开发了什么如此复杂的东西吗?我的应用程序非常简单,所有动作都发生在服务器端。 - Peter Wone
你可以在这里阅读有关我的应用的信息:http://techcrunch.com/2013/08/30/nokia-takes-its-auto-ambitions-into-high-gear-with-connected-driving-a-cross-platform-suite-of-in-car-navigation-and-location-services-and-smartphone-apps/ - Haspemulator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接