根据本文档,我将使用ServiceProvider和以下代码绑定视图模型:this.BindingContext = App.Current.Services.GetService(typeof(ViewModelA));
但是对于业务规则,我需要在页面之间传递数据,在做了研究之后,我遇到了这个stackoverflow question,建议使用以下代码this.BindingContext = new ViewModelA(data);
所以我不确定这是否破坏了mvvm模式。如果它破坏了,那么在使用Ioc & DI时是否有其他传递数据的方法。任何帮助都将不胜感激。
2条答案
按热度按时间irtuqstp1#
杰森的建议是解决这个问题的一个方法。
另一种方法需要额外的设置。
请参阅建构函式插入。
具体来说,在ConfigureServices()中添加
services.AddSingleton<MyData>();
,其中
MyData
是ViewModel的构造函数中声明的data
参数的类。或者,如果您使用建议的方法声明一个接口
IMyData
,您可以在任何地方使用该接口,而不是直接引用class MyData
,services.AddSingleton<IMyData, MyData>();
nfzehxib2#
Jason的建议是最容易实现的,我在BaseViewModel中创建了
Init(data)
,然后其他视图模型将继承它,并且我使用ServiceProvider绑定视图模型。