我可以使用界面在不同项目的ViewModel之间导航吗

我在不同的PCL项目上使用具有多个模块的应用程序。我无法在每个模块之间创建依赖关系。因此,我想知道是否可以使用接口从不同模块的ViewModel进行导航。

考虑两个模块(PCL):MyApp.FooModuleMyApp.BarModule每个模块都有ViewModel,FooModuleViewModelBarModuleViewModel接口存储在每个模块引用的另一个PCL projet(例如MyApp.Interfaces)上。您可以在下面看到我的项目依赖项:

MyApp.Droid:MyApp.Interfaces,MyApp.FooModule,MyApp.BarModule

MyApp.FooModule:MyApp.Interfaces

MyApp.BarModule:MyApp.Interfaces

我尝试从FooModuleViewModel导航BarModuleViewModel,因此在我的应用程序设置中,我想编写如下内容:

Mvx.RegisterType<IBarModuleViewModel, BarModuleViewModel>();

FooModuleViewModel中

ShowViewModel<IBarModuleViewModel>();

实际上,当实现该目标时,我会遇到一个异常(由MvxAndroidViewsContainer抛出):

Exception masked KeyNotFoundException: Could not find view for IBarModuleViewModel

有没有办法做到这一点,还是我必须在ShowViewModel方法上使用“真实”类型

斯图尔特

这可以通过一些技术来实现。

首先,您可以使用具体的ViewModel类型,但提供某种IoC驱动的路由,以允许ViewModel查找类型信息-例如

public interface IViewModelLookupService
{
    void Register(Type interfaceType, Type concreteType);
    Type Lookup(Type interfaceType);
}

然后,可以用以下代码填充该代码的单例实现:

lookupService.Register(typeof(IBarModuleViewModel), typeof(BarModuleViewModel));

然后可以稍后用于显示视图模型:

var type = lookupService.Lookup(typeof(IBarModuleViewModel));
ShowViewModel(type);

另外,此方法的一种变化是使用“enum或”string名称而不是接口进行查找。


或者,第二种方法可能是在每个平台上覆盖您的演示者-所有这些都有一个接口:

public interface IMvxViewPresenter
{
    void Show(MvxViewModelRequest request);
    void ChangePresentation(MvxPresentationHint hint);
}

视图模型请求对象在哪里:https : //github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxViewModelRequest.cs

如果要覆盖此void Show(MvxViewModelRequest request)方法,则可以使用此方法将任何MvxViewModelRequest一个接口替换ViewModelType为具体的接口,例如:

 public override Show(MvxViewModelRequest request)
 {
     if (request.ViewModelType.IsInterface)
     {
          var concreteType = // TODO - lookup type here...
          request = new MvxViewModelRequest(concreteType, request.ParameterValues, request.PresentationValues, request.RequestedBy);
     }

     base.Show(request)
 }

这将需要在每个平台上进行


其他方法也可能... Mvx相当模块化并且确实可以重写-Wiki页面可能会有所帮助-https: //github.com/MvvmCross/MvvmCross/wiki

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以授予管道权限,以便它可以使用API读取Azure Devops中不同项目的信息吗?

我可以使用来自不同Google项目的两个Google服务json文件吗?

我可以使用LINQ为我提供LIST中项目的非对象视图吗?

我可以使用每行包含多个项目的 Virtualize 组件吗?

我可以使用与我使用的库不同的 _ITERATOR_DEBUG_LEVEL 链接项目吗?

我可以在MVP模式的不同项目中创建View和Presenter吗

UWP使用来自不同项目的页面

我可以使用分支机构来持有不同但相关的项目吗?

我可以使用NSMutableArray insertObjects:atIndexes以不同的顺序插入多个项目吗?

是否可以使用 1 个 html 文件来查看不同页面上的不同项目?

我可以使用eslint获得特定于项目的自定义代码弃用消息吗?

我们可以在BigQuery中两个不同项目中的表上执行联接吗?

比较来自不同项目的文件

来自不同项目的NLog

我可以使用不同的方式运行 order by 吗?

我可以使用mapply拟合不同的回归模型吗?

我可以使用“ Visual Studio”或其他系统更改“ redmine”界面元素吗?

我可以在不同的界面中对不同的方法使用相同的名称吗?

我可以使用相同的URL,但可以使用不同的动态细分吗?

我可以使导航菜单项的文本与其他项不同吗?

我可以使用Visual Studio C#引用类库项目的Blazor项目

在不同项目之间共享微服务

无法在不同项目之间共享 ResourceDictionary

我可以使用/导入我的 ARCore 项目(在 Unity 中)到我的 Flutter 项目吗?

我可以分别设置不同的无序列表项目的样式吗?

我可以在导航抽屉中更改图标和项目标题之间的距离吗?

不同项目的不同宽度-在iCarousel中

当与推荐项目的相关性为二进制形式时,我们可以使用NDCG作为推荐系统指标吗?

无法使用请求解析网页中不同项目的链接