Как сделать многоступенчатую страницу регистрации с несколькими ContentView? - PullRequest
0 голосов
/ 23 декабря 2018

В приложении, над которым я работаю, есть многоэтапная регистрация, 4 шага: чтобы выполнить ее, я думаю, что у меня будет одна страница для размещения представления контента шага регистрации, когда он проходит проверку.требования, я удаляю это и вставляю следующее представление содержания.Вот пример, чтобы упростить мою потребность:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamApp"
             x:Class="XamApp.MainPage">
        <local:Register1/>
</ContentPage>

и Register1 выглядит так:

    <ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:local="clr-namespace:XamApp"
                 x:Class="XamApp.Register1">
        <ContentView.Resources>
            <ResourceDictionary>
                <local:IntToBoolConverter x:Key="intToBool"/>
            </ResourceDictionary>
        </ContentView.Resources>
        <ContentView.Content>
            <StackLayout>
                <Label Text="Page 1" FontSize="Large"/>
                <Entry x:Name="txtName" Placeholder="Name"/>
                <Button Text="Next" IsEnabled="{Binding Source={x:Reference txtName},
                                        Path=Text.Length,
                                        Converter={StaticResource intToBool}}"
                        Clicked="Button_Clicked"/>
            </StackLayout>
        </ContentView.Content>
    </ContentView>

Есть две проблемы:

1- Я не знаю, как обрабатывать данные (представление модели) между этапами, чтобы на всех этапах был только один объект (Должен ли я использовать DI? Если да, то как в MVVMLight?)

2- Как динамически внедрить представление контента в главную страницу регистрации в режиме MVVM?

1 Ответ

0 голосов
/ 24 декабря 2018

Решением, которое я придумал, является создание интерфейса:

    public interface INavigate
    {
        INavigate Next();
        INavigate Previous();
    }

всех ContentView s наследуемых, например, от второй реализации ContentView:

    public INavigate Next()
    => new View3();

    public INavigate Previous()
    => new View1();

свойство Content страницы контейнера привязано к свойству модели представления CurrentView типа INavigate, команда следующей кнопки выполняет это:

CurrentView = CurrentView.Next();

, и это для предыдущей кнопки:

CurrentView = CurrentView.Previous();
...