2009-07-30 5 views
0

Ich habe ein Silverlight DataGrid, das eine einzelne Vorlagenspalte enthält, die ein Benutzersteuerelement anzeigt. Das Benutzersteuerelement verfügt über einen Fortschrittsbalken zur Darstellung der Verarbeitung. Wenn die Verarbeitung abgeschlossen ist, blendet eine Animation den Fortschrittsbalken aus und zeigt ein fertiges Etikett an.Silverlight DataGrid Redraw Problem

Es gibt zwei Fälle, in denen das Datenraster nicht selbst neu zu zeichnen scheint:

Erste, , wenn ein Benutzer nicht viel Scrollen Sie dann die Datagrid durch Nachziehen der Animation zu starten, wenn die Usercontrol in Sicht kommt und wird schließlich einen Punkt erreichen, an dem nichts neu gezeichnet wird.

Zweite, Es gibt ein Klickereignis in der Benutzersteuerung, das ein Popup anzeigt. Wenn das Popup geschlossen wird, kann die Benutzersteuerung nicht mehr korrekt neu gezeichnet werden.

Irgendwelche Ideen, warum dieses Verhalten auftritt und um es herum?

Antwort

1

Die vorherige Antwort ist korrekt. Ich habe festgestellt, dass Sie manchmal die Load_Row- und Unloading_Row-Ereignisse richtig behandeln müssen, wenn Sie möchten, dass sich eines Ihrer Steuerelemente ordnungsgemäß verhält. In meinen Fällen funktionieren die Steuerelemente, die tatsächlich an ein Objekt gebunden sind, am besten. Wenn Sie versuchen, sich auf Animationen und Sichtbarkeit und Ähnliches zu verlassen, werden Sie merkwürdiges Verhalten sehen, aber wenn Sie den Fortschrittsbalken an ein Objekt binden, das den Fortschritt für jedes Objekt im Hintergrund hält, wird es jedes Mal, wenn diese Zeile angezeigt wird, neu binden und neu zeichnen.

+0

Hatten Sie ein seltsames Verhalten, wenn Benutzer auch in das Raster klicken? Das Klicken scheint auch ein "Repaint" zu erzeugen, das ein Neuzeichnen der Animation erzwingen kann. – t3rse

0

Sie müssen verstehen, dass ein DataGrid nicht über eine Instanz Ihres Steuerelements für jede Zeile im Raster verfügt. Die Datenquelle kann Millionen von Zeilen enthalten, während das Raster nicht mehr Instanzen Ihres Steuerelements benötigt, als auf den Bildschirm passen. Dies bedeutet, dass beispielsweise beim Scrollen keine zuvor unsichtbaren Instanzen Ihrer Steuerung angezeigt werden. Es weist den aktuell sichtbaren Steuerelementen nur die Werte zu, die für die korrekte Anzeige der aktuellen Bildlaufposition erforderlich sind.

Ich weiß nicht, ob es eine Problemumgehung gibt.