【问题标题】:Xamarin architechture for sharing events between android platform and ViewModel用于在 android 平台和 ViewModel 之间共享事件的 Xamarin 架构
【发布时间】:2018-11-29 16:13:33
【问题描述】:

我有一个在 Janam XT2 掌上电脑上运行的应用程序。

我的 Andriod 项目的扫描仪库工作正常。我希望能够将扫描的事件传递给视图模型。我似乎无法弄清楚我做错了什么。

设置如下

使用 Prism,VS 2017,MVVM。

包含条形码特定类的共享项目。与 Android 项目和我的数据的 MVVM 模块共享。

我当前的 UI 有一个单独的 MVVM 模块。

在 android MainActivity 中,我引用了具有 EventAggregator 属性的 App 实例。当扫描仪的 Received 事件在 Android 应用程序 (MainActivity) 中触发时,我正在发布一个 ScannerEvent。

这按我认为应该的方式工作,但尝试在 ViewModel 中订阅该事件没有任何结果。

有人有什么想法吗?

编辑:响应 Nkosi 的评论请求。

    public ListViewBaseModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        Warehouses = new ObservableCollectionFast<WarehouseListItem>(Client.GetAsync(new WarehouseListQuery() { CompanyID = "SPF", UseBins = 1 }).Result.Results);
        _eventAggregator.GetEvent<BarcodeScannerEvent<ScanResults>>().Subscribe(BarcodeScanned);

    }


    public virtual void BarcodeScanned(ScanResults results)
    {

    }

【问题讨论】:

  • 在视图模型中显示您订阅事件的方式
  • Shared Project 是指Class Library 还是实际的Shared Project?提示:你想要一个类库...
  • 不,这是一个共享项目

标签: mvvm prism


【解决方案1】:

如果您在共享项目中创建活动,它将为每个引用该项目的项目创建一个不同的类型(这是共享项目的本质,它们就像链接的源文件,将被添加到编译时的引用程序集)。

这样,您为发布者创建一个事件,为订阅者创建另一个事件(即使它们具有相同的名称并且看起来相同)。因为订阅者订阅的事件与发布者发布的事件不同,所以订阅者不会收到 他的 事件。

要解决此问题,请废弃共享项目并使用类库。

【讨论】:

  • 太棒了。完毕。核对了我的清单。
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2011-07-22
  • 1970-01-01
  • 2019-07-02
  • 2010-11-12
相关资源
最近更新 更多