Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Xamarin.Forms MVVM应用程序中的何处加载数据?_C#_Xamarin_Mvvm_Xamarin.forms - Fatal编程技术网

C# 在Xamarin.Forms MVVM应用程序中的何处加载数据?

C# 在Xamarin.Forms MVVM应用程序中的何处加载数据?,c#,xamarin,mvvm,xamarin.forms,C#,Xamarin,Mvvm,Xamarin.forms,在Xamarin.Forms MVVM体系结构应用程序中加载数据的最佳位置在哪里?例如: 我正在使用一个选项卡式页面,其中一些内容页面包含选择器。选择器项资源绑定到ViewModel属性。在哪里放置加载选择器项源数据的逻辑的最佳位置 我可以在ViewModel构造函数中完成,但我不认为这是推荐的,因为在构造函数中加载数据只是糟糕的编码。不幸的是,我在页面上找不到任何“已加载”。也许可以使用“OnAppearing”事件 数据加载是异步的,我目前根本没有使用任何MVVM框架。这取决于您希望使用的M

在Xamarin.Forms MVVM体系结构应用程序中加载数据的最佳位置在哪里?例如:

我正在使用一个选项卡式页面,其中一些内容页面包含选择器。选择器项资源绑定到ViewModel属性。在哪里放置加载选择器项源数据的逻辑的最佳位置

我可以在ViewModel构造函数中完成,但我不认为这是推荐的,因为在构造函数中加载数据只是糟糕的编码。不幸的是,我在页面上找不到任何“已加载”。也许可以使用“OnAppearing”事件


数据加载是异步的,我目前根本没有使用任何MVVM框架。

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

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的实例时,就会调用它。这是通过
FreshPageModelResolver
类完成的,谢谢。这很好,因为我使用autofac作为IoC,所以我可以尝试初始化已注册实例的OnActivating事件的H视图。最好的方法是在另一个线程上异步初始化。