cómo crear una vista de cuadrícula desde el diccionario
Frecuentes
Visto 854 veces
1
Tengo un diccionario donde la clave es una cadena y el elemento es una lista
Quiero crear un grupo de cada clave con elementos de elemento. Pero no se como hacerlo
<Page.Resources>
<!--
Collection of grouped items displayed by this page, bound to a subset
of the complete item list because items in groups cannot be virtualized
-->
<CollectionViewSource
x:Name="groupedItemsViewSource"
IsSourceGrouped="true"
/>
</Page.Resources>
<GridView ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
IsSwipeEnabled="True">
<GridView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding name}"
Foreground="White" />
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Test 123" Foreground="Gold" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Orientation="Vertical" />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</GridView.GroupStyle>
</GridView>
En loop creo el diccionario
groups.Add(this.letters[i], items);
y despues de eso tengo
groupedItemsViewSource.Source = groups;
Pero no consigo nada. ¿Cómo debo corregir esto para tener una clave como título de grupo y cada lista como una lista de elementos en esta cuadrícula?
// EDITAR
Ok, descubrí que hacer List> en lugar de Dictionary es mejor. Ahora obtengo 3 encabezados de grupo (porque tengo 3 listas en mi lista) pero no tengo elementos. En mi opinión, esta es una mejor manera que la primera.
// EDITAR 2 No vi elementos porque el fondo y el primer plano eran blancos. Estúpido de mí :) Pero ahora tengo el último problema que resolver. ¿Cómo establecer dinámicamente los títulos de los grupos?
2 Respuestas
1
En realidad, no tiene que crear clases personalizadas para habilitar la agrupación. De hecho, puede usar LINQ para que lo haga por usted:
var result = from act in Activities group act by act.Project into grp orderby grp.Key select grp;
cvsActivities.Fuente = resultado;
Para mostrar elementos agrupados en un GridView, debe usar CollectionViewSource. Simplemente configurar los grupos como GridView.ItemsSource no funcionará. Debe establecer GridView.ItemsSource = un CollectionViewSource y CollectionViewSource debe apuntar a los grupos. Es probable que también deba configurar CollectionViewSource.IsSourceGrouped = true.
Respondido 27 ago 12, 22:08
0
El diccionario no implementa INotifyPropertyChanged o INotifyCollectionChanged, que es necesario si desea que su enlace funcione
public class yourclass
{
public string Key { get; set; }
public int Value { get; set; }
}
ObservableCollection<yourclass> dict = new ObservableCollection<MyCustomClass>();
dict.Add(new yourclass{Key = "yourkey", Value = whatyouwant});
dict.Add(new yourclass{ Key = "yourkey2", Value = whatyouwant });
Respondido 26 ago 12, 12:08
gracias por su ayuda. Tengo clase de este tipo. Con campo clave y valor que es una Lista tipo. Pero ahora no obtengo absolutamente nada después de la vinculación. ¿Tal vez pueda enviarle más código para que tenga una mejor visión general? - Fixus
hola, mira este proyecto, te ayudará a comprender cómo vincular un control de cuadrícula codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples - Hassan Boutougha
lamentablemente puedot solve my problem. When I want to bind only items to grid view it
es fácil Pero no puedo enlazar objetos agrupados. Por ejemplo, objeto con clave y Lista como artículos. no consigo nada Solo espacio en blanco. Sin artículos, sin títulos :/ - Fixus
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# xaml windows-8 windows-runtime winrt-xaml or haz tu propia pregunta.
No cambies tu pregunta. Nos hace disparar a un blanco en movimiento. - Emond
@Erno, lo siento, solo estoy tratando de dar la mayor cantidad de información posible: Fixus
Esto no es más información, es solo otra pregunta. Imagina que algunos tienen el mismo problema que el último que agregaste. ¿Cuáles son las posibilidades de que tropiece con esta pregunta? - Emond