我在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)
{
}
答案 0 :(得分:1)
如果您在 Shared Project 中创建事件,它将为每个引用该项目的项目创建一个不同的类型(这是共享项目的本质,它们就像链接的源文件一样,将被添加到编译时引用程序集。
这样,您将为发布者创建一个事件,为订阅者创建另一个事件(即使它们具有相同的名称并且看起来相同)。因为订阅者订阅的事件与发布者发布的事件不同,所以订阅者将不会收到他的事件。
要解决此问题,请废弃共享项目并使用类库。