2012-01-10 49 views
1

我在WPF中开始一个新项目,现在正在研究使用Prism。现在我只是试图使用Prism来设置应用程序的导航。不幸的是,我对框架的经验不足使得开始有点困难。由于选择列表,我怎样才能顺序设置导航?

为了更准确地了解我的第一个挑战,我有一个带有“导航/菜单”区域和“主”区域的应用程序。

在“导航/菜单”区域,我有几个复选框,在这种情况下,我们有四个复选框,代表一个顺序导航。 I.E.我们选择视图2和视图4

enter image description here

因此,当用户单击开始,在“主”区域必须出现在顺序选择每个视图。检查下面的图像,视图2是第一个。然后,当用户按下一步,必须显示视图4.

enter image description here

我的意思是更上一个结构层次..

,如果我只能通过第一步骤得到..

+0

你的意思是顺序吗? – Brandon 2012-01-10 22:36:50

+0

是的,我的意思是..对不起我的英文不好 – 2012-01-10 22:46:17

回答

1

Prism支持TabControl Region适配器,可以使用标准的requestNavigation方法完成导航。

  1. 你需要使用Region.Add方法所有的标签内容添加到区域中的模块的初始阶段。

    观点:

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

    C#代码:

    IRegionManager manager; 
    manager.Regions["tabRegion"].Views.Add(Container.Resolve(typeof(YourViewType))); 
    
  2. 在您的视图模型,你应该写你的导航命令:

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

    绑定到你的 “下一步” 按钮:

    <Button Command="{Binding NextViewCommand}" /> 
    
  3. 如果要控制用户是否可以导航到下一页,则可以实现INavigationAware接口。

  4. 如果你不想在导航之间丢失数据,你可以让你的视图模型有ContainerMangedLifeCycle或者实现IsNavigationTarget方法返回true

对不起,未经测试的代码示例,但你应该明白了。

0
  1. 使用属性IsSelected创建一个名为ViewVM的类。必须实现INotifyPropertyChanged。
  2. 将一个名为ViewsObservableCollection<View>添加到您的datacontext中。用ViewVM的新实例填充它。
  3. 将ItemsControl放置在窗口中,并将ItemsSource设置为Views。 ItemsControl项目的DataTemplate应该包含一个CheckBox(IsChecked绑定到IsSelected)和一个Label。
  4. 将TabControl添加到您的窗口,并将ItemSource设置为Views。为TabItem添加一个样式,这样TabItems只有在IsSelected为真时才可见。

按照上述步骤,将根据您的要求为您提供一个包含带有复选框的视图列表的窗口,以及一个仅显示所选视图的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的。您的自定义控件应不包含制表符,而应包含NextPrevious按钮以在视图之间导航。

+0

你的想法看起来不错。我有一个疑问,所以我不必再使用PRISM的导航界面了,对吗? – 2012-01-11 04:03:30

相关问题