Mvvm 将ContentView嵌套到ContentPage作为Xamarin体系结构的最佳实践

Mvvm 将ContentView嵌套到ContentPage作为Xamarin体系结构的最佳实践,mvvm,xamarin.forms,Mvvm,Xamarin.forms,我有一个应用程序,基本上加载到主页ContentPage一堆的ContentView。我认为这里有一个问题,因为每次加载主页时,所有viewmodels都需要初始化。我想知道是否值得我花时间抛弃下面的代码,将视图从ContentView转换为ContentPage,只做导航;相反抱歉,我知道这是很多示例代码,但我真的很想清楚地了解最佳实践 My Home.xaml <Grid x:Name="ContentBody" VerticalOptions="FillAndExpand"

我有一个应用程序,基本上加载到主页ContentPage一堆的ContentView。我认为这里有一个问题,因为每次加载主页时,所有viewmodels都需要初始化。我想知道是否值得我花时间抛弃下面的代码,将视图从ContentView转换为ContentPage,只做导航;相反抱歉,我知道这是很多示例代码,但我真的很想清楚地了解最佳实践

My Home.xaml

    <Grid x:Name="ContentBody" VerticalOptions="FillAndExpand">
    <local:View1 Grid.Row="0" x:Name="View1" IsVisible="{Binding View1IsVisible}" BindingContext="{Binding View1ViewModel}" />
    <local:View2 Grid.Row="0" x:Name="View2" IsVisible="{Binding View2IsVisible}" BindingContext="{Binding View2ViewModel}" />
    <local:View3 Grid.Row="0" x:Name="View3" IsVisible="{Binding View3IsVisible}" BindingContext="{Binding View3ViewModel}" />
    <local:View4 Grid.Row="0" x:Name="View4" IsVisible="{Binding View4IsVisible}" BindingContext="{Binding View4ViewModel}" />
    <local:View5 Grid.Row="0" x:Name="View5" IsVisible="{Binding View5IsVisible}" BindingContext="{Binding View5ViewModel}" />
    <local:View6 Grid.Row="0" x:Name="View6" IsVisible="{Binding View6IsVisible}" BindingContext="{Binding View6ViewModel}" />
    <local:DrawerView Grid.Row="0" x:Name="DrawerView" IsVisible="{Binding DrawerViewIsVisible}" />

</Grid>

Then In my HomeViewModel...

    private readonly View1ViewModel _view1ViewModel = new View1ViewModel();
    public View1ViewModel View1ViewModel { get { return _view1ViewModel; } }
    private readonly View2ViewModel _view2ViewModel = new View2ViewModel();
    public View2ViewModel View2ViewModel { get { return _view2ViewModel; } }
    private readonly View3ViewModel _view3ViewModel = new View3ViewModel();
    public View3ViewModel View3ViewModel { get { return _view3ViewModel; } }
    private readonly View4ViewModel _view4ViewModel = new View4ViewModel();
    public View4ViewModel View4ViewModel { get { return _view4ViewModel; } }
    private readonly View5ViewModel _view5ViewModel = new View5ViewModel();
    public View5ViewModel View5ViewModel { get { return _view5ViewModel; } }
    private readonly View6ViewModel _view6ViewModel = new View6ViewModel();
    public View6ViewModel View6ViewModel { get { return _view6ViewModel; } }
///////////////////Some Visibility Properties...//////////////////////

在与Xamarin团队的成员交谈之后,我被告知要删除此homeview页面中的所有视图,将透视视图模型绑定到它们自己的代码中,然后从那里我可以使用navigation.PushAsync(new View1())进行导航

教程:

文件:

您试图实现的目标是什么,而这些目标是使用多个ContentPage无法实现的?每个ContentView真的与其他的有那么大的区别吗?整个应用程序的工作原理如上所述我想知道是否存在潜在问题,因为应用程序中的每个视图模型都加载在主页视图上我继承了这段代码,我想知道像这样将所有VIWW加载到主视图上是否正常坦率地说,这似乎是一种奇怪的做事方式。如果你真的坚持使用这种方法,我不会把所有的ContentView都放在XAML中,而是根据需要实例化和显示它们,这应该不会占用太多内存。我认为最好将所有视图都更改为ContentPages,并在需要时只推异步,而不是使用所有这些PartialView。我很感谢你的关注,因为我确信这是有意的,这是一些最佳实践的一部分