Ioc、DI和在Xamarin表单中的页面之间传递数据

xxls0lw8  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(125)

根据本文档,我将使用ServiceProvider和以下代码绑定视图模型:
this.BindingContext = App.Current.Services.GetService(typeof(ViewModelA));
但是对于业务规则,我需要在页面之间传递数据,在做了研究之后,我遇到了这个stackoverflow question,建议使用以下代码
this.BindingContext = new ViewModelA(data);
所以我不确定这是否破坏了mvvm模式。如果它破坏了,那么在使用Ioc & DI时是否有其他传递数据的方法。任何帮助都将不胜感激。

irtuqstp

irtuqstp1#

杰森的建议是解决这个问题的一个方法。
另一种方法需要额外的设置。
请参阅建构函式插入。
具体来说,在ConfigureServices()中添加
services.AddSingleton<MyData>();
其中MyData是ViewModel的构造函数中声明的data参数的类。
或者,如果您使用建议的方法声明一个接口IMyData,您可以在任何地方使用该接口,而不是直接引用class MyData
services.AddSingleton<IMyData, MyData>();

nfzehxib

nfzehxib2#

Jason的建议是最容易实现的,我在BaseViewModel中创建了Init(data),然后其他视图模型将继承它,并且我使用ServiceProvider绑定视图模型。

var viewModelA = App.Current.Services.GetService<ViewModelA>();
viewModelA.Init(data);
this.BindingContext = viewModelA;

相关问题