用于在 android 平台和 ViewModel 之间共享事件的 Xamarin 架构
Xamarin architechture for sharing events between android platform and ViewModel
我在 Janam XT2 掌上电脑上有一个应用程序 运行。
我的 Andriod 项目的扫描器库工作正常。我希望能够将扫描的事件传递给视图模型。我似乎无法弄清楚我做错了什么。
设置如下
使用 Prism、VS 2017、MVVM。
包含特定条码的共享项目类。与 Android 项目和我的数据的 MVVM 模块共享。
我有一个单独的 MVVM 模块用于我当前的 UI。
在 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)
{
}
如果您在 共享项目 中创建活动,它将为引用该项目的每个项目创建一个不同的类型(这是共享项目的本质,它们就像链接的源文件并将在编译时添加到引用程序集中。
通过这种方式,您可以为发布者创建一个事件,为订阅者创建另一个事件(即使它们具有相同的名称和外观)。因为订阅者订阅的事件与发布者发布的事件不同,所以订阅者将不会收到 his 事件。
要解决此问题,请废弃共享项目并使用 class 库。
我在 Janam XT2 掌上电脑上有一个应用程序 运行。
我的 Andriod 项目的扫描器库工作正常。我希望能够将扫描的事件传递给视图模型。我似乎无法弄清楚我做错了什么。
设置如下
使用 Prism、VS 2017、MVVM。
包含特定条码的共享项目类。与 Android 项目和我的数据的 MVVM 模块共享。
我有一个单独的 MVVM 模块用于我当前的 UI。
在 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)
{
}
如果您在 共享项目 中创建活动,它将为引用该项目的每个项目创建一个不同的类型(这是共享项目的本质,它们就像链接的源文件并将在编译时添加到引用程序集中。
通过这种方式,您可以为发布者创建一个事件,为订阅者创建另一个事件(即使它们具有相同的名称和外观)。因为订阅者订阅的事件与发布者发布的事件不同,所以订阅者将不会收到 his 事件。
要解决此问题,请废弃共享项目并使用 class 库。