Поскольку список выбора, как я могу установить навигацию последовательно? - PullRequest
1 голос
/ 11 января 2012

Я начинаю новый проект в WPF и сейчас изучаю использование Prism.Сейчас я просто пытаюсь настроить навигацию приложения с помощью Prism.К сожалению, из-за отсутствия у меня опыта в работе с фреймворком немного сложно начать работу.

Чтобы быть более точным в моей первой задаче, у меня есть приложение с областью «навигация / меню» и «основной» областью..

В области «навигация / меню» у меня есть несколько флажков, в этом случае у нас есть четыре из них, которые представляют последовательную навигацию.То есть мы выбрали View 2 и View 4.

enter image description here

Таким образом, когда пользователь нажимает кнопку «Пуск», в «основной» области должны отображаться все виды, выбранные в этом порядке.Проверьте изображение ниже, вид 2 - первый.Затем, когда пользователь нажимает «Далее», должен отображаться «Вид 4».

enter image description here

Я имею в виду на более структурном уровне ..

, если бы я мог пройти только через первыйшаги ..

Ответы [ 2 ]

1 голос
/ 11 января 2012

Поддержка призмы TabControl Region Adapter, навигация может быть выполнена стандартным методом requestNavigation.

  1. Вам необходимо добавить все содержимое вкладки, используя метод Region.Add, в область фазы инициализации вашего модуля.

    view:

    <TabControl prism:RegionManger.RegionName="tabRegion" />
    

    C # код:

    IRegionManager manager;
    manager.Regions["tabRegion"].Views.Add(Container.Resolve(typeof(YourViewType)));
    
  2. В вашей viewModel вы должны написать команду навигации:

    public void NextView() {
        regionManager.RequestNavigation("tabRegion", new Uri("YourViewType", UriKind.Relative));
    }
    

    привязка к вашей следующей кнопке:

    <Button Command="{Binding NextViewCommand}" />
    
  3. Если вы хотите контролировать, может ли пользователь перейти на следующую страницу, вы можете реализовать интерфейс INavigationAware.

  4. Если вы не хотите потерять данные между навигациями, вы можете настроить модель представления на ContainerMangedLifeCycle или реализовать метод IsNavigationTarget для возврата true.

Извините за непроверенный пример кода, но вы должны понять.

0 голосов
/ 11 января 2012
  1. Создайте класс с именем ViewVM со свойством IsSelected. Необходимо реализовать INotifyPropertyChanged.
  2. Добавьте ObservableCollection<View> с именем Views к вашему текстовому тексту. Заполните его новыми экземплярами ViewVM.
  3. Поместите ItemsControl в свое окно, установив для ItemsSource значение Views. DataTemplate для элементов ItemsControl должен содержать CheckBox (с привязкой IsChecked к IsSelected) и меткой.
  4. Добавьте TabControl в свое окно с ItemSource, установленным в Views. Добавьте стиль для TabItem таким образом, чтобы TabItems были видны, только если IsSelected имеет значение true.

Выполнение вышеупомянутых шагов даст вам окно, содержащее список представлений с флажками, как вы запросили, и TabControl, отображающий только выбранные представления. Ниже приведен XAML (я проверял это):

<StackPanel>
            <ItemsControl ItemsSource="{Binding Path=Views}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <CheckBox IsChecked="{Binding Path=IsSelected}"></CheckBox>
                            <TextBlock Text="{Binding Path=Title}"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
            <TabControl ItemsSource="{Binding Path=Views}">
                <TabControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <TextBlock Text="{Binding Path=Title}"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </TabControl.ItemTemplate>
                <TabControl.Resources>
                    <Style TargetType="TabItem">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=IsSelected}" Value="False">
                                <Setter Property="Visibility" Value="Collapsed"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TabControl.Resources>
            </TabControl>
        </StackPanel>

Это относится к аспекту структуры / дизайна и должно дать вам хорошее начало для создания вашего решения - вам также нужно создать собственный элемент управления для использования вместо TabControl. Вместо вкладок ваш пользовательский элемент управления должен содержать кнопки Next и Previous для навигации между представлениями.

...