DataTrigger im DataGrid zieht nicht bei Änderung einer Property in einer ObservableCollection

  • WPF MVVM

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    DataTrigger im DataGrid zieht nicht bei Änderung einer Property in einer ObservableCollection

    Moin,

    meine VM sieht so aus:
    Spoiler anzeigen

    C#-Quellcode

    1. private ObservableCollection<Produkt> _produkte = new ObservableCollection<Produkt>();
    2. public ObservableCollection<Produkt> Produkte
    3. {
    4. get { return _produkte; }
    5. set
    6. {
    7. if (Equals(value, _produkte)) return;
    8. _produkte = value;
    9. OnPropertyChanged();
    10. }
    11. }
    12. private Produkt _selectedProduct;
    13. public Produkt SelectedProduct
    14. {
    15. get { return _selectedProduct; }
    16. set
    17. {
    18. if (Equals(value, _selectedProduct)) return;
    19. _selectedProduct = value;
    20. OnPropertyChanged();
    21. }
    22. }
    23. public MainWindowVM()
    24. {
    25. Config.LoadFromXML();
    26. Produkte = new ObservableCollection<Produkt>(Config.Default.Produkte);
    27. }


    In meiner View habe ich folgendes definiert:
    Spoiler anzeigen

    XML-Quellcode

    1. ​ <DataGrid.RowStyle>
    2. <Style TargetType="DataGridRow">
    3. <Style.Triggers>
    4. <Trigger Property="AlternationIndex" Value="0">
    5. <Setter Property="Background" Value="LightGray"/>
    6. </Trigger>
    7. <Trigger Property="AlternationIndex" Value="1">
    8. <Setter Property="Background" Value="SlateGray"/>
    9. </Trigger>
    10. <DataTrigger Binding="{Binding Import}" Value="True">
    11. <Setter Property="Background" Value="Red"></Setter>
    12. </DataTrigger>
    13. </Style.Triggers>
    14. </Style>
    15. </DataGrid.RowStyle>


    Wenn der Wert in einem Produkt vorher schon True ist dann wird die Zeile Rot.
    Wenn ich den Wert eines ausgewählten Produkts zur RunTime ändere bleibt die Zeile in der Farbe in der sie ist.

    Die Klasse Produkt hat INotifyPropertyChanged implementiert die VM auch.
    Im Normalfall sollte doch das DataGrid sich aktualisieren auch wenn ich nur ein Item aus der Collection ändere oder übersehe ich was?
    Vielleicht auch zuviel programmieren dieses Wochenende.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Hast du in der Modelklasse auch INotifyPropertyChanged implementiert? Denn dort wird ja ja die Property geändert.
    Ich hab das via CellStyle gemacht, aber sollte auch gut mit RowStyle gehen, hast ja gesagt reagiert nur nicht auf änderung.

    C#-Quellcode

    1. public class TitleModel : Notifyable
    2. {
    3. //...
    4. private bool isActiveTitle = false;
    5. public bool IsActiveTitle { get => isActiveTitle; set { isActiveTitle = value; RaisePropertyChanged(nameof(IsActiveTitle)); } }
    6. //...
    7. }

    XML-Quellcode

    1. <DataGrid.CellStyle>
    2. <Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellStyle}">
    3. <Style.Triggers>
    4. <DataTrigger Binding="{Binding IsActiveTitle}" Value="True">
    5. <Setter Property="Background" Value="{StaticResource BackgroundBrushAccent}"></Setter>
    6. <Setter Property="Foreground" Value="{StaticResource TextBrushHighlight}"></Setter>
    7. </DataTrigger>
    8. </Style.Triggers>
    9. </Style>
    10. </DataGrid.CellStyle>


    Dazu hab ich eine ObservableCollection die als Source für eine ListCollectionView dient, die ListCollectionView ist dann als ItemsSource des DataGrid festgelegt. ListCollectionView weil Filter + Customsort.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    DTF schrieb:

    Hast du in der Modelklasse auch INotifyPropertyChanged implementiert? Denn dort wird ja ja die Property geändert.


    .... Ja ich würde sagen das war genug für heute.
    Nein also INotify war drin aber die Propertys kamen alle aus einem XSD und hatten kein RaiseEvent dabei...
    Hätte jetzt Stunden weiter gesucht ich danke dir :)
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    xChRoNiKx schrieb:

    Hätte jetzt Stunden weiter gesucht ich danke dir


    Genre doch, dafür sind wir hier. Kenn das nur zu gut, eine Kleinigkeit zu übersehen kann wirklich viel Zeit rauben. Hab dieses Wochenende auch viel Zeit damit verbracht Wege kennenzulernen die nicht funktionieren.

    Thomas A. Edison schrieb:

    Ich habe nicht versagt. Ich habe nur 10000 Wege gefunden, die nicht funktionieren.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D