2012-04-19 2 views
5

Próbuję utworzyć ItemsControl, który jest obciążony wyświetlaniem różnych elementów posortowanych według metadanych. Każdy element może mieć wiele metadanych. Na przykład element typu "Rozmowa" może mieć metadane "Rozdział", "Akt" i "Wolumen".WPF - Style grupowe: Czy możemy powiązać tylko właściwość "Nazwa"?

Po wyszukaniu sposobu pracy grupowej w WPF dowiedziałem się o GroupStyles i klasie PropertyGroupDescription.

Utworzono własną klasę, która dziedziczy z PropertyGroupDescription i która zwraca obiekt typu "Metadane".

Czy jest tak, że w moim GroupStyle DataTemplate Moje ItemsControl mogę powiązać z zwróconym obiektem (tj. Obiekt "Metadata"), a następnie wyświetlić jego właściwości, jak chcę? Czy jestem zmuszony związać się z "Imieniem"?

Innymi słowy:

<ItemsControl.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
      <DataTemplate> 
        Am I forced to bind to "Name" here ? 
      </DataTemplate> 
     </GroupStyle.HeaderTemplate> 
    </GroupStyle> 
</ItemsControl.GroupStyle> 

Odpowiedz

13

Domyślnie DataContext w GroupStyle można wiązać z tym CollectionViewGroup Properties. Ale oczywiście możesz ustawić dowolny inny BindingSource, jeśli potrzebujesz.

Jeśli chcesz pierwszy obiekt w użytku Grupa:

<TextBlock Text="{Binding Path=Items[0].YourStringProperty}" /> 
+1

Ale przedmioty jest szereg elementów i nie stanowi przedmiotu GroupDescription. To znaczy. własność 'Metadata' pozostaje niedostępna? – Dani

0

domyślnie, gdy robi wiązanie z niestandardowego obiektu, będzie starał wyświetlacz stosując metodę jego toString(), nie jest to nazwa (dobrze, toString() drukuje imię, domyślnie i tak). Możesz spróbować zastąpić metodę ToString(), aby wydrukować coś innego, zobaczysz co mam na myśli.

Ale oczywiście można zdefiniować własne DataTemplate i powiązanie z inną właściwością.

<DataTemplate> 
<TextBlock Text="{Binding XXXXX}"/> 
</DataTemplate>