Xamarin Architechture,用于在Android平台和ViewModel之间共享事件

时间:2018-11-29 16:13:34

标签: mvvm prism

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

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

设置如下

使用Prism,VS 2017,MVVM。

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

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

在android MainActivity中,我引用了具有EventAggregator属性的App实例。在Android应用程序(MainActivity)中触发扫描仪的Received事件时,我正在发布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)
    {

    }

1 个答案:

答案 0 :(得分:1)

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

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

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