Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[WP] Caliburn.Micro dynamisch controls aanmaken

Pagina: 1
Acties:

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 19-11 14:59
Hallo allemaal, ik ben wat onderzoek aan het doen naar Windows Phone ontwikkeling in combinatie met Caliburn.Micro. Dit gaat op zich wel en het databinden/tonen van data werkt allemaal goed. Alleen ben ik nu bij een lastig stukje gekomen, ik moet dynamisch verschillende types controls aanmaken.

De situatie is zo, ik wil een scherm maken waarin de gebruiker voor verschillende velden gegevens kan invoeren. Alleen deze velden staan niet vast en zijn configureerbaar. Ik moet dus dynamisch de controls aanmaken. De ene keer kan het bijvoorbeeld zijn dat het een tekst veld en een datum veld is, terwijl het een andere keer twee tekst velden, drie keuzelijsten en een datum veld is enz.

Zijn er manieren in Caliburn.Micro/WP om dit te doen in een MVVM patroon? Waar ik nu aan zit te denken is om in het OnNavigatedTo event van de page het ViewModel op te halen en op basis daarvan controls aan te gaan maken. Het grote nadeel daarvan is dat de View en het ViewModel eigenlijk direct aan elkaar gekoppeld zijn.

Ik heb wel wat gezocht, maar niet echt een goed voorbeeld gevonden.

Hail to the king baby!


  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 22-11 19:13
Ik denk dat dit heel mooi op te lossen is met compositie. Je formulier heeft bijvoorbeeld een property BindableCollection<Veld> Velden, waar elk veld een eigen VM subclass is met validatie-logica en dat soort dingen (DatumVeldVM, MeerkeuzeVeldVM enz).
Voor elk van die veld-VM's maak je een bijbehorende View (DatumVeldView, MeerkeuzeVeldView).

Met deze Xaml krijg je een lijst van de goede Views voor je veld VM's:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- dit is Silverlight --> 
            <ItemsControl ItemsSource="{Binding Velden}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Vertical"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ContentControl cal:View.Model="{Binding}"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

Hier zie je een voorbeeld: http://compiledexperience...-a-data-template-selector

Een alternatief is meerdere Views voor 1 VM, maar dan krijg je snel één ingewikkelde VM ipv een hoop simepele. http://stackoverflow.com/...entcontrol-caliburn-micro