Лучшие практики для вложения ContentViews в ContentPage как архитектуру Xamarin - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть приложение, которое в основном загружает кучу ContentViews в домашний ContentPage. Я думаю, что здесь есть проблема, потому что все view-модели по существу должны были бы инициализироваться каждый раз, когда мы загружаем домашнюю страницу. Мне интересно, стоит ли мне потратить время на то, чтобы отказаться от кода ниже и преобразовать представления из ContentView в ContentPage и просто выполнить Navigation.PushAsync (new View1 ()); вместо. Извините, я знаю, что это пример кода, но мне бы очень хотелось получить четкое представление о наилучшей практике.

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...//////////////////////

///////////////////Some Visibility Properties...//////////////////////
private bool _view1IsVisible;
public bool View1IsVisible
{
    get { return _view1IsVisible; }
    set { _view1IsVisible = value; OnPropertyChanged("View1IsVisible"); }
}

private bool _view2IsVisible;
public bool View2IsVisible
{
    get { return _view2IsVisible; }
    set { _view2IsVisible = value; OnPropertyChanged("View2IsVisible"); }
}

private bool _view3IsVisible;
public bool View3IsVisible
{
    get { return _view3IsVisible; }
    set { _view3IsVisible = value; OnPropertyChanged("View3IsVisible"); }
}

private bool _view4IsVisible;
public bool View4IsVisible
{
    get { return _view4IsVisible; }
    set { _view4IsVisible = value; OnPropertyChanged("View4IsVisible"); }
}

private bool _view5IsVisible;
public bool View5IsVisible
{
    get { return _view5IsVisible; }
    set { _view5IsVisible = value; OnPropertyChanged("View5IsVisible"); }
}

private bool _view6IsVisible;
public bool View6IsVisible
{
    get { return _view6IsVisible; }
    set { _view6IsVisible = value; OnPropertyChanged("View6IsVisible"); }
}

/////And then this is more or less a method to show the view/////////////

private void ShowView(ViewChangedEventArgs e)
{
    HideAllViews();
    switch(e.SelectedView){
	    case ViewType.View1:
	    	View1IsVisible = true
	    	break;
	    case ViewType.View2:
	    	View2IsVisible = true
	    	break;
	    case ViewType.View3:
	    	View3IsVisible = true
	    	break;
	    case ViewType.View4:
	    	View4IsVisible = true
	    	break;
	    case ViewType.View5:
	    	View5IsVisible = true
	    	break;
	    case ViewType.View6:
	    	View6IsVisible = true
	    	break;
    }
}

Может кто-нибудь сказать мне, подходит ли этот подход? так как при использовании этого подхода каждый раз, когда я добавляю новую страницу, мне нужно будет добавить представление в представление домашней страницы и свойства viewModel & IsVisible для представления домашней страницы ViewModel ..

Буду очень признателен за любые указания по этому вопросу. Я думаю, что лучшим подходом было бы просто отделить ContentViews от HomePage, и когда я перейду к одному из этих представлений, я бы просто PushAsync. Я видел подтверждающую документацию в Интернете, где некоторые люди используют вышеуказанный подход, я просто пытаюсь спросить экспертов, что они думают, когда увидят этот код.

1 Ответ

0 голосов
/ 26 апреля 2018

После выступления с одним из членов команды Xamarin мне сказали удалить все виды с этой страницы домашнего просмотра, связать модели перспективного вида с их собственными кодами, и оттуда я могу перемещаться с помощью Navigation.PushAsync (новый View1 ());

Учебник: https://github.com/XamarinUniversity/XAM290

Документация: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...