2012-01-10 44 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

相關問題