2010-12-18 9 views
3

Ich verwende die WPF-Ribbon-Steuerung mit einigem Erfolg; Ich versuche jetzt, die Multifunktionsleisten-Galerie zu verwenden und die Kategorien in einem datengebundenen Szenario zu verwenden. Hier einige Beispieldaten: -Binden von IGrouping an eine Ribbon-Gruppe

 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" }, 
     }; 

ich die Gruppierung der Daten und wollen die Elemente in einer Galerie angezeigt werden, gruppiert nach Kategorie: -

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

Alle ziemlich Standard. Meine XAML sieht wie folgt aus: -

   <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> 

Wenn jedoch die App läuft, während ich richtig die Kategorien erhalten in der Band Galerie zeigt, jedes Element nur ein leeres Quadrat ist. Ich weiß, dass die Sammlungen gebunden werden, weil ich sehe, dass die Kategoriegröße z. Sport als PC.

alt text

Wenn ich hart Code der XAML, wie es natürlich alle Werke folgt: -

Irgendwelche Ideen, was ich falsch hier? Vielen Dank!

Antwort

3

OK, ich habe diese Arbeit jetzt bekommen „richtig“. Was ich tun musste, war eher, als das DataTemplate zu setzen, um einen Style für den ItemsContainerStyle in der RibbonGallery anzuwenden.

Dieser Stil muss einfach vom Typ RibbonGalleryCategory sein und über einen Eigenschaften-Setter für die ItemsSource verfügen. In meinem Fall war es einfach {Binding}, und ich musste den DisplayMemberPath einstellen.

Ich habe immer noch kein vollständiges Verständnis der Hierarchie der RibbonGallery in Bezug darauf, wie es die Dinge formatiert - aber zumindest funktioniert dieser Ansatz.

UPDATE: Hier ist der entsprechende XAML für das Codebeispiel I ursprünglich geliefert:

<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

Kannst du XAML hier posten und dies als eine Antwort markieren? – decyclone

0

nicht sicher, warum, aber wenn Sie ein ItemsPanel zu RibbonGalleryCategory zuweisen, es funktioniert:

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

Aha! OK - so kann ich jetzt meine Artikel in der Liste sehen. Sie können jedoch nicht ausgewählt werden, wenn ich sie manuell im XAML fest codiert habe, was darauf hindeutet, dass das ItemsPanelTemplate standardmäßig verloren geht, wenn ich ItemTemplate irgendwie ändere. Aber danke für den Vorschlag :) –