android - Windows Phone 8 等同于 Android 的 StartActivityForResult

标签 android xaml windows-phone-8

我有 Android 背景,正在升级到 Windows Phone 8。

我有一个使用摄像头解码二维码的页面,效果很好。在 Android 中,我会使用 Intent StartActivityForResult 启动此 Activity,然后它将解码后的值返回给原始 Activity。

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

问题

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

最佳答案

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

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

接下来,服务可以相互依赖。我正在使用 Ninject 框架进行依赖注入(inject)。本质上,如果服务 A 依赖于服务 B,它会导致这样的代码:

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

其中 IB 是一个接口(interface),由服务 B 实现。

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

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 的单个实例,以便主页面和详细信息页面共享同一个实例。当网络数据更新时,会触发一个事件,这样两个 View 模型都可以更新它们的网络数据实例,并将新数据推送到 View 。

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

如果你想让我更深入地了解某个主题的细节,请随时在评论中提问。 Android 开发人员非常欢迎 Windows Phone。 :)

关于android - Windows Phone 8 等同于 Android 的 StartActivityForResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589311/

相关文章:

Android MediaRecorder 用于记录 Surface(不是相机)

java - 安卓工作室 : NOAA Rest API

WPF ComboBox 多列

c# - 我应该如何在 .net core 3.0 中绑定(bind)来自 WPF 的 xaml 事件?

windows-phone-8 - Windows Phone 8 上的后退按钮

sqlite - Windows Phone 8的SQLitePlugin Phonegap崩溃

android - Retrofit2 和证书固定

java - 从 radio 组获取和返回文本

c# - 在 WPF 中通过 XAML 代码加载外部图像?

c# - Wp8 :Not able to get checkBox in listbox