C# — UWP: загрузка другого представления в одном базовом представлении

Я студент-разработчик программного обеспечения и для своего школьного проекта ищу решение для загрузки различных представлений в базовомпредставлении. У меня есть приложение UWP, которое работает на Raspberry Pi.
Для моего приложения мне нужна навигация между двумя пользователями (обычным и опытным пользователем).

Итак, какой у меня вопрос?
Как переключаться между двумя пользователями, но без перезагрузки представлений(страниц)?
Представления не может обновляться, потому что содержимое отображается в режиме реального времени и должно запускаться также при переключении между представлениями пользователя.

Это приложение C# Uwp. На данный момент у меня есть файлы:

  • BaseView.xaml (это (основной) вид, в который я хочу загрузить Aview или Bview)
  • AView.xaml
  • BView.xaml

Мэйби кто-нибудь может помочь мне с этим?

Спасибо.


person Stelt    schedule 07.04.2017    source источник


Ответы (2)


Вы можете поместить ContentPresenter в ваш BaseView. Затем оберните ваши AView и BView в шаблоны данных. Теперь вы можете использовать конвертер для выбора шаблона, который показывает ваш ContentPresenter.

<Page>
    <Page.Resources>
        <DataTemplate x:Key="AViewTemplate">
            <views:AView />
        </DataTemplate>
        <DataTemplate x:Key="BViewTemplate">
            <views:BView />
        </DataTemplate>
        <conv:ModeToTemplateConverter ATemplate="{StaticResource AViewTemplate}" BTemplate="{StaticResource BViewTemplate}" />
    </Page.Resources>

    <ContentPresenter Content="{Binding YourViewModel}" 
                      ContentTemplate="{Binding Mode, Converter={StaticResource ModeToTemplateConverter}}" />
</Page>

Преобразователь может быть таким:

    public class ModeToTemplateConverter : IValueConverter
    {
        public DataTemplate ATemplate { get; set; }

        public DataTemplate BTemplate { get; set; }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var mode = value as Mode?;
            switch (mode)
            {
                case Mode.A:
                    return ATemplate;
                case Mode.B:
                    return BTemplate;
                default:
                    return null;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
person Pavel    schedule 07.04.2017

Вы можете иметь оба представления в соответствии с вашими потребностями в файле BaseView.xaml. Там вы поддерживаете 2 сетки - одну для AView, а другую для BView, а затем, наконец, на основе ваших пользовательских критериев вы скрываете/показываете видимость обеих сеток.

Ваше здоровье!

person tushargoyal1309    schedule 10.04.2017