2012-04-19 11 views
5

Estoy tratando de crear un ItemsControl que se encarga de visualizar varios elementos ordenados por metadatos. Cada elemento puede tener múltiples metadatos. Por ejemplo, un elemento de tipo "conversación" podría tener un "capítulo", "Ley" y metadatos "volumen".WPF - estilos de grupo: ¿Podemos sólo se unen a la propiedad "Nombre"?

Al buscar cómo agrupación trabajó en WPF, me enteré de GroupStyles y la clase PropertyGroupDescription.

Creé mi propia clase que hereda de PropertyGroupDescription y que devuelve un objeto de tipo "Metadata".

¿Hay alguna forma de que en ElementsControl GroupStyle DataTemplate pueda vincularme al objeto devuelto (es decir, el objeto "Metadata") y luego mostrar sus propiedades como me gustaría? ¿O estoy obligado a vincularme a "Nombre"?

En otras palabras:

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

Respuesta

13

Por defecto DataContext en GroupStyle puede enlazar a esta CollectionViewGroup Properties. Pero, por supuesto, se puede establecer cualquier otro BindingSource si es necesario.

Si desea que el primer objeto en su uso:

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

pero los artículos es la matriz de los artículos y no del objeto GroupDescription. Es decir. la propiedad 'Metadata' sigue siendo inaccesible – Dani

0

Por defecto cuando se hace la unión al objeto personalizado, intentará pantalla usando su método ToString(), no es el nombre (bueno, ToString() imprime el nombre de predeterminado de todos modos). Puede intentar anular el método ToString() para imprimir algo más, verá lo que quiero decir.

Pero, por supuesto, puede definir su propia DataTemplate y la unión a diferentes propiedades.

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