【问题标题】:Windows Phone 8 Equivalent for Android's StartActivityForResultWindows Phone 8 等效于 Android 的 StartActivityForResult
【发布时间】:2013-05-11 10:58:14
【问题描述】:

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

我有一个使用摄像头解码 QR 码的页面,它工作正常。在 Android 中,我将使用 Intent StartActivityForResult 启动此 Activity,然后它将解码后的值返回给原始 Activity。

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

问题

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

【问题讨论】:

  • 我想要 Windows 等价物而不是 Android。
  • 好的,你用mvvm吗?还是其他模式?
  • 我还没有使用 MVVM,但是我愿意查看任何答案,因为我确信有几个选项。
  • 尝试检查stackoverflow.com/questions/4143383/…。希望对你有帮助

标签: android xaml windows-phone-8


【解决方案1】:

首先,在 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 获取一些数据,并通过定期轮询使其保持最新状态。该 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 数据实例,并将这些新数据推送到视图。

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

如果您希望我更深入地了解某些主题,请随时在 cmets 中提问。 Windows Phone 非常欢迎 Android 开发人员。 :)

【讨论】:

  • 哇,多么好的回应,我感谢您的态度和质量。我发现平台之间的整体迁移并不太痛苦,而且我更喜欢 VS 而不是 Eclipse。我对 MVVM 有点了解,所以我想我周末有一些作业。
  • VS真的很好,同意。几年前一直在使用 Eclipse 进行 Symbian 开发,也还可以,但没有那么好。但是 WP 开发中最好的东西是 C# 语言,IMO。从 Java 迁移过来,我希望你也会发现它很棒。 :)
  • [笑] 如果我不完全同意,我会说你是微软的骗子,Haspemulator。不幸的是,我选择了另一种方式,因为我的 WP8 应用程序足以让我想要一个更大的池塘。我能问一下你到底在手机上创造了什么如此复杂的东西吗?我的应用程序非常简单,所有操作都发生在服务器端。
  • 你可以在这里阅读我的应用程序:techcrunch.com/2013/08/30/…
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
相关资源
最近更新 更多