Avatar billede iakob Nybegynder
14. december 2009 - 15:09 Der er 4 kommentarer og
1 løsning

WPF/Xaml: Databinding af kolonneoverskrifter i en DataGrid

Jeg har problemer med at få vist mine kolonneoverskrifter for en datagrid.

Jeg bruger MVVM-pattern og har sat DataContext i min view til en ViewModel (PriceMatrix). ViewModel har så en ObservableCollection af ProduktPriser samt en liste af produkter. For hver produkt beregnes så en pris for de næste 5 år.

For at gøre det hele ekstra besværlig så har jeg lagt datagrid ind i en usercontrol (ProductPriceGrid) fordi jeg skal vise et variablet antal af disse grids baseret på andre data (tilhørsforhold).

Jeg vil derfor gerne have at årstal for de næste 5 år vises som kolonneoverskrifter.

Jeg har defineret 5 resourcer i usercontrol (productprice) således:
<sys:String x:Key="Year0" xml:space="preserve">Year0</sys:String>

Jeg har oprettet min datagrid således:
<Custom:DataGrid x:Uid="ProductPriceForYearGrid" x:Name="ProductPriceForYearGrid" AutoGenerateColumns="False" ItemsSource="{Binding ProductPrices}"  >
                <Custom:DataGrid.Columns>
                    <Custom:DataGridTextColumn x:Uid="Custom:DataGridTextColumn_1" Binding="{Binding PriceYear0}" Header="{DynamicResource Year0}" />
...
                </Custom:DataGrid.Columns>
            </Custom:DataGrid>


Inde i min codebehind fil for usercontrollen har jeg defineret en metode, som sætter disse ressourcer, alá:
this.Resources["Year0"] = years[0].ToString();

Den metode kaldes så af min viewmodel i forbindelse med at der laves nye ProductPriceGrid.

Mit problem er at der ikke vises nogen overskift. Jeg er dels i tvivl om hvorvidt datagrid leder efter de dynamiske ressourcer (Year0...) det rigtige sted (i usercontrollens resourcer) og om codebehind filen sætter de rigtige resourcer.

Kan der i forbindelse med brug af dynamiske resourcer være problemer med rækkefølgen hvori controller oprettes og initieres så jeg af den grund ikke får data vist.
Avatar billede Syska Mester
14. december 2009 - 15:18 #1
Har du defineret dem ? altså inden du ændre dem.

og tror du skal bruge:
FindResource() på din kontrol.

Så kan du jo se om den er null ... er den null, så bliver den jo ikke rebinded ...

// ouT
Avatar billede Syska Mester
14. december 2009 - 15:18 #2
ups, kan se du har defineret dem ...

Men hvad sker der så når du fyrer:
FindResource()
på din kontrol.

Finder den så en Resource ?
Avatar billede iakob Nybegynder
04. februar 2010 - 17:13 #3
Du må undskylde at jeg tog så lang tid om at svare - jeg fik andre, mere presserende opgaver - og i mellemtiden blev opgaven løst af en anden.
Avatar billede Syska Mester
04. februar 2010 - 22:19 #4
okay
Avatar billede iakob Nybegynder
05. februar 2010 - 08:09 #5
Løsningen var at lave en stackpanel med oversrifter som labels og give disse labels samme bredde som kolonnerne. På den måde kan man styre indholdet af overskrifterne på alle måder.

Ikke pænt, men det virker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester