[Windows 8/XAML] Programmatically datatemplate binding

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 10-07 06:43
Met onderstaande code wil ik aan een StackPanel (stckpnlCategories) een DataTemplate (CategoriesTemplate) toevoegen. Met het onderste codeblok lukt dat ook, echter wil ik ook data kunnen binden aan de DataTemplate. Dit wil maar niet lukken. Ik kan ook geen voorbeelden vinden op internet...
Visual Basic .NET:
1
2
3
4
5
<Page.Resources>
    <DataTemplate x:Key="CategoriesTemplate">
        <TextBlock Tekst="{Binding Categorie}" />
    </Datatemplate
</Page.Resources>

Visual Basic .NET:
1
2
3
Dim CategoriesTemplate As DataTemplate = Me.Resources("CategoriesTemplate")
' Hier wil ik aan CategoriesTemplate tekst binden aan het TextBlock
stckpnlCategories.Children.Add(CategoriesTemplate.LoadContent)

Hoe kan ik databinding toepassen in mijn code?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 25-05 11:39
Eerste hit op google?
http://stackoverflow.com/...atemplate-in-c-sharp-code

Even uit het hoofd was het zoiets
Visual Basic .NET:
1
2
Dim textblock = New FrameworkElementFactory(GetType(TextBlock))
textblock.SetValue(TextBlock.TextProperty, New Binding("Categorie"))

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 10-07 06:43
NickThissen schreef op zondag 25 november 2012 @ 14:15:
Eerste hit op google?
http://stackoverflow.com/...atemplate-in-c-sharp-code

Even uit het hoofd was het zoiets
Visual Basic .NET:
1
2
Dim textblock = New FrameworkElementFactory(GetType(TextBlock))
textblock.SetValue(TextBlock.TextProperty, New Binding("Categorie"))
Dat werkt helaas niet omdat dat WPF Xaml is en niet Windows Store Xaml

[ Voor 12% gewijzigd door Swerfer op 25-11-2012 14:24 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 10-07 06:43
Niemand?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 14:37
In WPF is een datatemplate alleen maar een representatie van een item uit je datasource. Je bind dus geen datasource aan je datatemplate maar stelt je categoriën/datasource dus in op de contentpresenter. Per item in je datasource word dan het datatemplate toegevoegd. Je hoeft op deze manier dus niet met children aan de slag.

Beetje dit idee:
http://www.c-sharpcorner....te-in-windows-store-apps/

Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 10-07 06:43
jip_86 schreef op zondag 25 november 2012 @ 22:21:
In WPF is een datatemplate alleen maar een representatie van een item uit je datasource. Je bind dus geen datasource aan je datatemplate maar stelt je categoriën/datasource dus in op de contentpresenter. Per item in je datasource word dan het datatemplate toegevoegd. Je hoeft op deze manier dus niet met children aan de slag.

Beetje dit idee:
http://www.c-sharpcorner....te-in-windows-store-apps/
Ik wil juist afwijken van de standaard. Ik wil namelijk volledige flexibiliteit hebben met hoe ik de StackPanel vul. Ik wil meerdere verschillende datatemplates door elkaar en meerdere keren kunnen toevoegen aan de stackpanel, maar met verschillende data eraan gebonden. Het voordeel van het gebruik van datatemplates is dat ze makkelijk in de design editor van Visualstudio te maken zijn.

Het lukt me wel om de data te koppelen, maar dat gaat via Loaded events, waarbij ik via een omweg de juiste data in de juiste controls krijg. Het lijkt mij dat het ook mogelijk moet zijn om op een direkte manier de data te binden, voor ik de datatemplate toevoeg aan de stackpanel via 'children.add'

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Als je met bindings wil werken, ga dan "all the way" en implementeer het MVVM pattern correct.
Maak een viewmodel waarin je je resources exposed en gebruik een itemscontrol om je panels in te steken. Daarin kan je meerdere datatemplates gebruiken, waarbij je onderscheid maakt tussen je verschillende types

Zoiets:
XML:
1
2
3
4
5
6
7
8
9
10
<ItemsControl ItemsSource="{Binding mijnresources}">
   <ItemsControl.ItemTemplate>
      <DataTemplate DataType="{x:Type type1}">
         <TextBlock Text="{Binding resourcenaam}" />
      </DataTemplate>
      <DataTemplate DataType="{x:Type type2}">
         <TextBlock Text="{Binding resourcenaam.ietsanders}" />
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

[ Voor 21% gewijzigd door boe2 op 26-11-2012 12:37 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.

Pagina: 1