Hallo,
ich habe die ItemsSource an die Files Property meines ViewModels gebunden, welche vom Typ List<FileModel> ist.
public class FileModel
{
public string Title { get; set; }
public string URL { get; set; }
public bool Download { get; set; }
public DownloadStatus Status { get; set; }
}
public enum DownloadStatus
{
Undefined,
Loading,
Loaded
}
Nun möchte ich die Zeile, wenn der Wert von Status gleich DownloadStatus.Undefined ist, grün einfärben.
Der Style passt, das habe ich schon sicherstellen können, aber warum funktioniert der DataTrigger nicht, was mache ich da falsch?
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Status}" Value="DownloadStatus.Undefined">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
Schreib mal nur "Undefined" als Value.
So, ich hab's dann doch noch im aller Letzten Versuch gefunden
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="0">
<Setter Property="Background" Value="green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
Was allerdings nicht funktioniert ist das Abfragen des Enums in WPF, weshalb ich jetzt einfach auf Integers ausgewichen bin.
Falls es doch mit Enums auch möglich ist, wie frage ich das in der Value-Property des DataTriggers ab?
Was allerdings nicht funktioniert ist das Abfragen des Enums in WPF, weshalb ich jetzt einfach auf Integers ausgewichen bin.
Falls es doch mit Enums auch möglich ist, wie frage ich das in der Value-Property des DataTriggers ab?
Schreib mal nur "Undefined" als Value.
Wie bereits gesagt, es funktioniert, allerdings wird die letzte der ausgewählten Zeilen nicht mehr komplett eingefärbt: siehe Anhang.
Wenn man aber eine andere Zeile anklickt, wird die komplette Zeile grün, die Information kommt also an, nur wird sie in der UI nicht gesetzt.
Irgendwie sieht das nicht besonders schön aus, kann man da irgendwas machen, dass nach Abarbeitung aller Downloads die KOMPLETTE Zeile grün ist?
Mich wundert ja, daß es überhaupt so funktioniert. Wo wird denn in deinem Code das NotifyPropertyChanged-Ereignis ausgelöst? Poste doch mal dein ViewModel mit dem Code, wo du den Status änderst.
Weeks of programming can save you hours of planning
Da das Ändern des Zustandes im Model selbst passiert, muss INotifyPropertyChanged auch in das Model rein, du findest es also hier:
public class FileModel : INotifyPropertyChanged
{
public string Title { get; set; }
public string URL { get; set; }
public bool Download { get; set; }
private DownloadStatus _status;
public DownloadStatus Status
{
get { return _status; }
set
{
_status = value;
OnPropertyChanged(nameof(Status));
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
https://github.com/CoderboyPB/PocherUI/blob/master/PocherUI/Models/FileModel.cs