Laden...

ListBox Mouseover-Event auf Wert einer Bool-Property binden

Erstellt von Annika234 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.363 Views
A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren
ListBox Mouseover-Event auf Wert einer Bool-Property binden

Hi,

ich bin zurzeit am entwickeln einer WPF-Anwendung bei der die Elemente je nach Status einer Variablen gefärbt werden. Wenn das MouseOver bzw. Selected Event getriggert wird möchte ich die Farbe natürlich auch entsprechend der Variablen ändern.


        <ListBox  ItemsSource="{Binding Einkauf, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
            <ListBox.Resources>
                <Style TargetType="ListBoxItem">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ImWagen}" Value="True">
                            <Setter Property="Background" Value="Green"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListBox.Resources>
        </ListBox>

So sieht meine Listbox aktuell aus. Bei MouseOver bzw. Selected möchte ich wenn die Bool-Property ImWagen auf true ist den Background Hellgrün haben. Wenn ImWagen False ist, soll es allerdings wie im Standart bleiben.
Ich bekomme bisher aber immer nur eins von beiden hin. Also Property ODER MouseOver aber nicht beides gleichzeitig.
Wie muss ich den Trigger schreiben, dass ich beides haben kann?

Vielen Dank im Voraus
Annika

5.657 Beiträge seit 2006
vor 4 Jahren

Wenn du mehrere Bedingungen hast, kannst du MultiTrigger bzw. MultiDataTrigger verwenden. Siehe dazu auch den Abschnitt "Styles und Trigger" in [Artikel] MVVM und DataBinding

Weeks of programming can save you hours of planning

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

Sorry, dass ich mich so spät erst melde, aber ich hatte bisher nicht wirklich Zeit das auszuprobieren. Jetzt habe ich mich wieder drangesetzt. Ich habe das mit dem Multitrigger mal ausprobiert. Allerdings ändert sich die Farbe bei dem geklickten Element nicht sondern bleibt immer grau. Egal ob mein Bool-Wert true oder false ist. Bei nicht geklickten Elementen funktioniert es

5.657 Beiträge seit 2006
vor 4 Jahren

Wir können dir leider nicht helfen, wenn du keinen Code zeigst. Siehe dazu [Hinweis] Wie poste ich richtig?

Weeks of programming can save you hours of planning

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

<ListBox  ItemsSource="{Binding Einkauf, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" Grid.Row="1" Grid.RowSpan="6">
            <ListBox.Resources>
                <Style TargetType="ListBoxItem">
                    <Style.Triggers>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Property="IsSelected" Value="True"/>
                                <Condition Binding="{Binding ImWagen}" Value="True"/>
                            </MultiDataTrigger.Conditions>
                            <Setter Property="Background" Value="LightGreen"/>
                        </MultiDataTrigger>
                        <DataTrigger Binding="{Binding ImWagen}" Value="True">
                            <Setter Property="Background" Value="Green"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListBox.Resources>
        </ListBox>

Der normale DataTrigger funktioniert. Nur der MultiDataTrigger nicht. Funktioniert auch nich wenn ich multiTrigger nehme. Eine von den beiden Conditions schmeißt immer einen Fehler

5.657 Beiträge seit 2006
vor 4 Jahren

Also wenn du wirklich Hilfe hier suchst, dann solltest du auch alle Informationen mitgeben, die wichtig sind, um dir helfen zu können. Die Fehlermeldung gehört dazu.

[Hinweis] Wie poste ich richtig?

Ansonsten hast du einen Debugger, um die Fehlerursache zu finden:
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
[Artikel] MVVM und DataBinding, Abschnitt Debugging

Weeks of programming can save you hours of planning

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

Also mein Code steht ja schon weiter oben, daran habe ich nichts geändert. Ich kann den Code fehlerfrei kompilieren. Wenn ich allerdings das Fenster mit der Listbox öffne bekomme ich vom ShowDialog() den Fehler > Fehlermeldung:

"Nicht-NULL wert für Binding erforderlich" Wenn ich die Condition mit dem Binding auskommentiere öffnet sich das Fenster. Allerdings funktioniert die Färbung des selektierten Objektes nicht.

Wenn ich jetzt anstatt dem MultiDataTrigger einen MultiTrigger verwende, dann bekomme ich den Fehler > Fehlermeldung:

"Nicht-NULL Wert für Property Erforderlich" .Wenn ich jetzt die Condition mit der Property auskommentiere lässt sich das Fenster auch ohne Probleme öffnen.

Das sieht für mich irgendwie nicht so aus als würde eines der beiden einen NULL Wert weitergeben.

Hinweis von Abt vor 4 Jahren

Bilder entfernt
[Hinweis] Wie poste ich richtig?