Autor Beitrag
sastrian
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 16.03.09 18:31 
die suche hier im forum ergab nichts was wirklich weitergeholfen hat, daher:

wie kann man mit xaml/wpf templates verschachteln.

es geht konktet um ein quizspielchen, bei dem fragen mit unterschiedlicher anzahl an antworten vorkommen.

ich würde gerne eine template für eine liste von fragen schreiben. die antworten sollen als radiobuttons dargestellt werden (wobei ich für jedes button eine eigene farbe setzen möchte)

ich scheine einige grundlegende dinge des konzeptes von wpf noch nicht verstanden zu haben, da ich seit mehreren stunde verzweifle:

wunsch


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<ListBox ItemSource="{Binding AlleFragen}">
    <ListBox.ItemTemplate>
        <Textbox... ItemSource="{Binding AlleFragen(i).FrageText}"
        <GroupBox...ItemSource="{Binding AlleFragen(i)">
            <StackPanel>
                <RadioButton ItemSource="{Binding AlleFragen(i).Antwort(j)}" Background="{Binding AlleFragen(i).Antwort(j).BG_COLOR}" />
            </StackPanel>
        </GroupBox>
    </ListBox.ItemTemplate>
</ListBox>


mir ist klar, dass dieses beispiel nicht läuft, aber ich hoffe es hilft mein problem zu verstehen.

wie kann man dies lösen?

lg
sas

idealerweise würde ich gerne die templates gar getrennt von einander deklarieren, so dass ich unterschiedliche fragetypen verwalten kann (beispielsweise solche mit buttons und solche mit bilder als antwortmöglichkeiten oder ähnliches)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 16.03.09 22:17 
user profile iconsastrian hat folgendes geschrieben Zum zitierten Posting springen:
idealerweise würde ich gerne die templates gar getrennt von einander deklarieren
Kein Problem in WPF :D . DataTemplate-Ressourcen werden automatisch auf alle Objekte des DataTypes angewandt, sodass es dann vereinfacht etwa so aussehen könnte:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
    <Window.Resources>
        <DataTemplate DataType="{x:Type Question}">
            <StackPanel>
                <TextBox Text="{Binding Text}" />
                <ItemsControl ItemsSource="{Binding Answers}" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate DataType="{x:Type Answer}">
            <RadioButton Content="{Binding Text}"
                         Background="{Binding BackgroundColor}" />
        </DataTemplate>
    </Window.Resources>
    ...
    <ItemsControl ItemsSource="{Binding AllQuestions}" />
Das ItemsControl sucht also für jedes Question-Objekt der Quelle das passende Question-Data-Template. In diesem verweist DataContext dann auf das jeweilige Objekt, wodurch das Binding ermöglicht wird. In diesem Template passiert dann noch einmal das gleiche mit den Answer-Objekten.
Die zwei DataTemplates wissen also nichts voneinander.

Grundsätzlich kann ich bei WPF nur raten, sich ein gutes Buch anzuschaffen. Mein persönlicher Favorit: www.amazon.de/Window...Nathan/dp/0672328917

_________________
>λ=