2010-12-18 8 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:

<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を投稿し、これをasnswerとしてマークできますか? – decyclone

0

なぜ必ずいますが、ItemsPanelRibbonGalleryCategoryに割り当てた場合、それが動作しない:

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

なるほど: は、ここで私はもともと付属のコード例に適切なXAMLです! OK - リストにアイテムが表示されるようになりました。ただし、手動でXAMLでハードコードした場合は選択できません。これは、ItemTemplateを何らかの形で変更すると、デフォルトのItemsPanelTemplateが失われているように見えます。 提案に感謝します:) –

関連する問題