Announcement

Collapse
No announcement yet.

[WPF] Image in DataGridTemplateColumn aktualisiert Anzeige nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF] Image in DataGridTemplateColumn aktualisiert Anzeige nicht

    Moin,

    Ich habe eine DataGrid, die sich aus mehreren DataGridTemplateColumns aufbaut.
    Die gebundenen Source ist eine OservableCollection, die mit dem INotifyPropertyChanged-Interface aktualisiert wird.

    Nun habe ich eine Spalte, in der Änderungen vorgenommen werden müssen, daher DataGridTemplateColumn.CellEditingTemplate
    HTML Code:
                        <DataGridTemplateColumn Header="Ziel" Width="250">
                            <DataGridTemplateColumn.CellEditingTemplate>
                                <DataTemplate>
                                    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Center" FontSize="16"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellEditingTemplate>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <StackPanel Margin="5" Orientation="Horizontal">
                                        <Border BorderBrush="#ccc" BorderThickness="1">
                                            <StackPanel Width="185" VerticalAlignment="Center">
                                                <TextBlock Text="{Binding TargetPlaceWarehouse}"/>
                                                <TextBlock Text="{Binding TargetPlaceName}" FontWeight="Bold"/>
                                            </StackPanel>
                                        </Border>
                                        <Button Content="..." Width="48" Height="48" VerticalAlignment="Center" Cursor="Hand"/>
                                    </StackPanel>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
    Die Bindings TargetPlaceWarehouse und TargetPlaceName werden nach der Eingabe aus der Datenbank ermittelt und auch korrekt neu gesetzt und angezeigt.

    Das einzige, was sich partout nicht aktualisieren lassen will, ist das entsprechende Image:
    HTML Code:
                        <DataGridTemplateColumn Header="Buchungstyp" Width="150">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Image Source="{Binding BookingDirectionImagePath, Mode=TwoWay}" Width="140" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
    Die ObservableCollection enthält Elemente vom Typ einer von mir definierten Klasse und aktualisieren tue ich das auf dieses Weise:
    Code:
                DataRow row = dt.Rows[0];
                BookingItemModel item = (BookingItemModel)dgBookingData.SelectedItem;
    
                item.BookingDirectionImagePath = @"/GUI.Umlagerung;component/images/dummy.png";
                item.TargetPlaceId = row.Field<int>("PlatzID");
                item.TargetPlaceName = row.Field<string>("Kurzbezeichnung");
                item.TargetPlaceWarehouse = row.Field<string>("Lagerkennung");
                item.TargetIsLocked = row.Field<bool>("IstGesperrt");
                item.TargetIsSlx = row.Field<bool>("IsSlx");
    In der Überwachung kann ich sehen, dass alle Werte für das Objekt korrekt aktualisiert werden, auch der Pfad zum Bild!
    Innerhalb des DataGrid wird auch alles korrekt visuell aktualisiert, nur eben das Bild nicht. Der Pfad stimmt, wenn ich den kopiere und initial setze, wird es angezeigt.
    Nur bei der Aktualisierung will es nicht.

    Wär schön, wenn ihr wieder mal auf meinen Denkfehler aufmerksam macht


    Danke und Gruß
    Arne
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    WPF ist jetzt nicht gerade meine Stärke aber ...

    Wenn BookingItemModel INotifyPropertyChanged implementiert also auch für BookingDirectionImagePath dann hilft vielleicht deinem Binding an Image Source noch ein "UpdateSourceTrigger=PropertyChanged" mitzugeben.
    Der Mode scheint so auch überflüssig. Kannst du den Pfad im Grid ändern?

    Alternativ um einfach mal was anderes zu probieren könntest du auch BookingItemModel direkt das Image veröffentlichen lassen anstatt den Pfad (als BitmapImage) und daran binden. Vielleicht verhält sich das anders.

    Comment


    • #3
      Entschuldige die späte Rückmeldung. Danke für Deine Hinweise.

      Das BookingItemModel hat das INotifyPropertyChanged nicht implementiert.
      Ich arbeite immer mit einer separaten Klasse für den DataContext, die dann wiederum das INotifyPropertyChanged implementiert hat. Darin befindet sich dann eine ObservableCollection<BookingItemModel>, die ja auf die Änderungen reagiert.
      Das funktioniert auch für jede Eigenschaft, selbst für die Source des Bildes! Nur die Darstellung wird nicht aktualisiert. Ich vermute, dass das Bild noch einmal neu gezeichnet werden muss, aber ich bin mir grad nicht sicher, wie ich das machen soll.

      PHP rocks!
      Eine Initiative der PHP Community

      Comment


      • #4
        > Darin befindet sich dann eine ObservableCollection<BookingItemModel>, die ja auf die Änderungen reagiert.

        ObservableCollection reagiert auf Änderungen der Liste nicht auf Änderung der Properties der Elemente in der Liste. Dafür brauchen die Elemente schon INotifyPropertyChanged selbst.

        Comment


        • #5
          Ah ok, verstehe. Versuche ich mal umzusetzen. Komme aber erst morgen wieder dazu.
          Danke für das Feedback!
          PHP rocks!
          Eine Initiative der PHP Community

          Comment

          Working...
          X