【问题标题】:Where to load data in a Xamarin.Forms MVVM-Application?在 Xamarin.Forms MVVM 应用程序中加载数据的位置?
【发布时间】:2017-05-17 08:34:00
【问题描述】:

将数据加载到 Xamarin.Forms MVVM 架构应用程序中的最佳位置是哪里?例如:

我正在使用带有一些包含选取器的 ContentPages 的选项卡式页面。 Pickers ItemsSources 绑定到 ViewModel-Property。将我加载 Pickers ItemsSource-Data 的逻辑放在哪里最好?

我可以在 ViewModel-Constructor 中执行此操作,但我认为不建议这样做,因为在构造函数中加载数据只是糟糕的编码。不幸的是,我在页面上找不到任何“已加载”。也许可以使用“OnAppearing”事件?

数据的加载是异步的,我暂时没有使用任何 MVVM 框架。

【问题讨论】:

  • 最好的地方是在另一个线程上,异步。

标签: c# xamarin mvvm xamarin.forms


【解决方案1】:

这取决于您要使用的 MVVM 框架。我个人更喜欢FreshMvvm。这有一个 Init 方法,您可以在 ViewModel 中覆盖,这是加载数据的理想位置。它还为您提供简单的导航方法。 Init 方法也是您在将新视图推送到导航堆栈时可以传递数据的地方。除此之外,它还为您提供ViewIsAppearingViewIsDisappearing 方法。

public override void Init (object initData)
{
    base.Init (initData);
}

public override void ReverseInit(object returnedData)
{
    base.ReverseInit(returnedData);
}

protected override void ViewIsAppearing(object sender, EventArgs e)
{
    base.ViewIsAppearing(sender, e);
}

protected override void ViewIsDisappearing(object sender, EventArgs e)
{
    base.ViewIsDisappearing(sender, e);
}

【讨论】:

  • 谢谢。目前,我根本没有使用 MVVM 框架,因为我所有的 ViewModel 都保存在 .netstandard 1.6 项目中,而且似乎 mvvm light 和freshmvvm 正在强制将视图和模型放在同一个项目中,我不会的。或许你知道fresh mvvm的init方法是什么时候调用的?
  • 当内置 IOC 容器尝试解析 PageModel 的实例时调用它。这是通过FreshPageModelResolvergithub.com/rid00z/FreshMvvm/blob/master/src/FreshMvvm/… 完成的
  • 谢谢。太好了,因为我使用 autofac 作为 IoC,我可以尝试在已注册实例的 OnActivating 事件上初始化视图。
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多