In mijn plugin maak ik gebruik van een ListView om hierin data uit een database weer te geven.
De data wordt middels databinding aan de juiste kolommen gekoppeld.
verschillende weergaven
Afhankelijk van het gekozen data format wil ik de weergave van mijn ListView wijzigen.
WPF is voor mij nieuw, en na het nodige zoekwerk en testen heb ik eigenlijk nog niet bereikt wat ik wil bereiken.
Wat ik gevonden heb is dat dat wat ik wil via DataTemplates mogelijk is, echter krijg ik het niet werkend.
Wat ik denk dat de juiste oplossingsrichting is
Bovenstaande is slechts een test waarbij de twee templates slechts verschillen in de volgorde van de kolommen.
In de achterliggende code zou ik dan met onderstaande een template moeten kunnen toekennen.
Bij het uitvoeren krijg ik echter een error.
De error verwijst naar <GridView> in miijn template en blijkbaar hoort dit daar niet.
Haal ik echter <GridView> weg dan krijg ik de error "The property "Visual Tree" can only be set once".
Hieruit maak ik op dat ik maar 1 <GridViewColumn> in mijn template mag hebben, maar dat is nou net niet wat ik wil.
Waar ga ik fout?
Ergens pas ik de principes van de Templates niet goed toe / heb ik iets niet goed begrepen.
Ik kom er echter zelf niet uit wat ik nu mis.
Wie kan mij vertellen wat ik moet veranderen of waar ik de juiste info kan vinden om mijn einddoel te bereiken?
De data wordt middels databinding aan de juiste kolommen gekoppeld.
verschillende weergaven
Afhankelijk van het gekozen data format wil ik de weergave van mijn ListView wijzigen.
WPF is voor mij nieuw, en na het nodige zoekwerk en testen heb ik eigenlijk nog niet bereikt wat ik wil bereiken.
Wat ik gevonden heb is dat dat wat ik wil via DataTemplates mogelijk is, echter krijg ik het niet werkend.
Wat ik denk dat de juiste oplossingsrichting is
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
| <Window.Resources> <DataTemplate x:Key="template1"> <GridView> <GridViewColumn Header="" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <Image Source="{Binding Path=Icon}" Width="64" Height="64"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="Soort" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <Label Width="200" Margin="5, 0" Content="{Binding Path=Name}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="Status" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <Label Width="100" Margin="5, 0" Content="{Binding Path=Status}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </DataTemplate> <DataTemplate x:Key="template2"> <GridView> <GridViewColumn Header="Eerste kolom" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <Label Width="200" Margin="5, 0" Content="{Binding Path=Name}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <Image Source="{Binding Path=Icon}" Width="64" Height="64"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="Laatste kolom" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <Label Width="100" Margin="5, 0" Content="{Binding Path=Status}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </DataTemplate> </Window.Resources> <Grid> <ListView x:Name="mylist" HorizontalAlignment="Left" Height="405" Margin="7,4,0,0" VerticalAlignment="Top" Width="520"> </ListView> </Grid> |
Bovenstaande is slechts een test waarbij de twee templates slechts verschillen in de volgorde van de kolommen.
In de achterliggende code zou ik dan met onderstaande een template moeten kunnen toekennen.
C#:
1
| mylist.ItemTemplate = (DataTemplate)this.TryFindResource("template2"); |
Bij het uitvoeren krijg ik echter een error.
code:
1
| The root of a Template content section cannot contain an element of type 'System.Windows.Controls.GridView'. Only FrameworkElement and FrameworkContentElement types are valid. |
De error verwijst naar <GridView> in miijn template en blijkbaar hoort dit daar niet.
Haal ik echter <GridView> weg dan krijg ik de error "The property "Visual Tree" can only be set once".
Hieruit maak ik op dat ik maar 1 <GridViewColumn> in mijn template mag hebben, maar dat is nou net niet wat ik wil.
Waar ga ik fout?
Ergens pas ik de principes van de Templates niet goed toe / heb ik iets niet goed begrepen.
Ik kom er echter zelf niet uit wat ik nu mis.
Wie kan mij vertellen wat ik moet veranderen of waar ik de juiste info kan vinden om mijn einddoel te bereiken?