Laden...

ItemsControl - Schaut bitte mal jemand, was hier falsch ist?

Erstellt von SueimWeb vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.870 Views
S
SueimWeb Themenstarter:in
55 Beiträge seit 2007
vor 14 Jahren
ItemsControl - Schaut bitte mal jemand, was hier falsch ist?

Hallo an alle,

seit über 2 Stunden kämpfe ich jetzt mit einem simplen ItemsControl, dessen ItemsSource an eine List<T> in einem ViewModel gebunden ist, welches wiederum den DataContext für das Fenster darstellt. Für die Darstellung der Items wird ein einfaches DataTemplate genutzt.

Die Liste wird ordnungsgemäß aus der Datenbank gefüllt, ich erhalte keinerlei Fehlermeldung, aber der Bereich im Fenster, an dem die Items angezeigt werden sollen, bleibt einfach LEER. 🙁

Ist bitte jemand so lieb und schaut sich mal den XAML Code an, was hier falsch sein könnte?


    <ItemsControl 
        x:Name="prioLevelItems" 
        Grid.Row="7" Grid.Column="2"
        HorizontalAlignment="Stretch"   
        Margin="10" 
        VerticalAlignment="Center"
        ItemsSource="{Binding PrioLevels}"
        >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" Margin="10"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <!-- Level's image -->
                    <Image x:Name="prioLevelImage" Width="16" Height="16"/>
                    <!-- Level's name -->
                    <TextBlock x:Name="prioLevelName" 
                               Text="{Binding Path=Description}"  
                               Padding="15,15"
                               Foreground="Black" />
                </StackPanel>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Path=Level}" Value="1">
                        <Setter TargetName="prioLevelImage" Property="Image.Source" Value="/myproject;component/Images/16x16/green.bmp" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=Level}" Value="2">
                        <Setter TargetName="prioLevelImage" Property="Image.Source" Value="/myproject;component/Images/16x16/yellow.bmp" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=Level}" Value="3">
                        <Setter TargetName="prioLevelImage" Property="Image.Source" Value="/myproject;component/Images/16x16/red.bmp" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Ich weiß einfach nicht mehr weiter....

Grüße

Sue

446 Beiträge seit 2004
vor 14 Jahren

Erhaltest du im Ausgabefenster Fehlermeldungen?

Welchen DataContext hat ItemsControl?

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

S
SueimWeb Themenstarter:in
55 Beiträge seit 2007
vor 14 Jahren

ItemsControl übernimmt ja den DataContext vom Fenster, also das ViewModel.
In der Ausgabe steht nichts.

446 Beiträge seit 2004
vor 14 Jahren

Wenn du im Loaded Event einen Breakpoint setzt kannst du das ItemsControl prioLevelItems genauer unter die Luppe nehmen.

Dann kannst du z.B. nachschauen wiei viel Items prioLevelItems besitzt. Falls sich Items darin befinden, stimmt wahrscheinlich mit dem Anzeigen der Daten (DataTemplate) etwas nicht.

Wenn sich keine Items darin befinden, ist entweder die Propertie PrioLevels leer, oder beim Binding stimmt was nicht.

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

S
SueimWeb Themenstarter:in
55 Beiträge seit 2007
vor 14 Jahren

Ok, hab' ich gemacht, also die das ItemsControl enthält die Items aus der Liste.
Von daher ist also alles ok.
Nun wäre die nächste Frage, was an dem DataTemplate nicht stimmt.
Ich kann einfach keinen Fehler finden...

446 Beiträge seit 2004
vor 14 Jahren

Ich hab jetzt deinen XAML Code bei mir getestet und die Items werden bei mir angezeigt.

Es muss also an etwas anderem liegen. Jetzt weiß ich auch nicht mehr weiter :S

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

S
SueimWeb Themenstarter:in
55 Beiträge seit 2007
vor 14 Jahren

Die Angabe hatte ich tatsächlich total vergessen, aber sie muss nicht ins StackPanel im DataTemplate, sondern in ein Child Element des ItemsControl. Ich hab jetzt einfach ein Grid als Child eingefügt und IsItemsHost="true" ergänzt.

Jetzt erhalte ich dummerweise die blöde Fehlermeldung:

Die Items-Auflistung muss vor dem Verwenden von "ItemsSource" leer sein.

Das hatte ich schon mal....kann mich dummerweise nicht mehr erinnern, wie ich das damals gelöst habe. Werde jetzt mal eine Suche durch meine Projekte laufen lassen, vielleicht finde ich es dann.

Erst mal vielen herzlichen Dank für die Hilfe!

Grüße

Sue

S
SueimWeb Themenstarter:in
55 Beiträge seit 2007
vor 14 Jahren

Unsere Beiträge haben sich wohl überschnitten.
Vielen Dank noch mal, dass du dir so viel Mühe gemacht hast.

Bei mir geht's nach wie vor nicht, ich könnte verrückt werden. 😦

Hab' jetzt mal im OnLoaded des Fensters folgendes gemacht:

List<PrioLevel> items = new List<PrioLevel>(this.prioLevelItems.Items.Cast<PrioLevel>());

foreach(PrioLevel p in items)
Debug.WriteLine(p.Description);

Das funktioniert einwandfrei.