2010-12-18 28 views
3

我使用WPF功能區控件取得了一些成功;我正在嘗試使用功能區庫,在數據綁定方案中使用類別。下面是一些示例數據: -將IGrouping綁定到功能區組

 var data = new[] 
     { 
      new { Category = "Sport", Hobby = "Football" }, 
      new { Category = "Sport", Hobby = "Table Tennis" }, 
      new { Category = "Music", Hobby = "Guitar" }, 
      new { Category = "Music", Hobby = "Piano" }, 
      new { Category = "PC", Hobby = "StarCraft 2" }, 
     }; 

我分組的數據並將要顯示在畫廊的項目,按類別分組: -

 IEnumerable CategorisedHobbies; 
     CategorisedHobbies = data.GroupBy(d => d.Category).ToArray(); 

所有相當標準。我的XAML如下所示: -

   <ribbon:RibbonGallery ItemsSource="{Binding CategorisedHobbies}"> 
        <ribbon:RibbonGallery.ItemTemplate> 
         <DataTemplate> 
          <ribbon:RibbonGalleryCategory Header="{Binding Key}" ItemsSource="{Binding}" MaxColumnCount="1"> 
           <ribbon:RibbonGalleryCategory.ItemTemplate> 
            <DataTemplate> 
             <ribbon:RibbonGalleryItem Content="{Binding Hobby}"/> 
            </DataTemplate> 
           </ribbon:RibbonGalleryCategory.ItemTemplate> 
          </ribbon:RibbonGalleryCategory> 
         </DataTemplate> 
        </ribbon:RibbonGallery.ItemTemplate> 
       </ribbon:RibbonGallery> 

然而,當應用程序運行,而我得到正確的色帶畫廊展示的類別,每個項目僅僅是一個空白的正方形。我知道集合越來越受限,因爲我可以看到類別大小比較大,例如運動比PC。

alt text

如果我硬編碼的XAML如下它當然所有作品: -

任何想法,我做錯了什麼?謝謝!

回答

3

OK,我已經得到了現在這個工作「正常」。我所要做的不是設置DataTemplate是爲RibbonGallery上的ItemsContainerStyle應用樣式。

此樣式只需要是RibbonGalleryCategory類型,並且需要具有ItemsSource的屬性設置器。就我而言,它僅僅是{Binding},另外我必須設置DisplayMemberPath。

我仍然沒有完全理解RibbonGallery的層次結構方式 - 但至少這種方法是有效的。

UPDATE: 下面是該代碼示例相應的XAML我最初提供:

<r:RibbonWindow.Resources> 
    <Style TargetType="r:RibbonGalleryCategory" x:Key="HobbyCategoryStyle"> 
     <Setter Property="Header" Value="{Binding Key}"/> 
     <Setter Property="ItemsSource" Value="{Binding}"/> 
     <Setter Property="DisplayMemberPath" Value="Hobby"/> 
    </Style> 
</r:RibbonWindow.Resources> 
<r:RibbonMenuButton Label="Example menu button"> 
    <r:RibbonGallery ItemsSource="{Binding CategorisedHobbies}" ItemContainerStyle="{StaticResource ResourceKey=HobbyCategoryStyle}"/> 
</r:RibbonMenuButton> 
+0

你可以在這裏發佈XAML,並將其標記爲一個偶然嗎? – decyclone 2010-12-24 05:25:57

0

不知道爲什麼,但如果你分配一個ItemsPanelRibbonGalleryCategory,它的工作原理:

<ribbon:RibbonGalleryCategory.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel IsItemsHost="True" /> 
    </ItemsPanelTemplate> 
</ribbon:RibbonGalleryCategory.ItemsPanel> 
+0

啊哈!好 - 我現在可以在列表中看到我的項目。然而,如果我手動在XAML中對它們進行了硬編碼,它們不是可選的,這似乎表明默認的ItemsPanelTemplate在我以某種方式更改ItemTemplate時會丟失。 但是,謝謝你的建議:) – 2010-12-19 11:56:42