2010-11-29 6 views
0

Ich binde eine Objektliste an ein ItemsControl, das ein TextBox-Steuerelement enthält.WPF Aktualisiert die Bindungseigenschaften mehrerer Objekte, die gleichzeitig in einer Liste enthalten sind

Ich möchte in der Lage sein, die Textbox-Hintergrundfarbe basierend auf der Hintergrundfarbe Eigenschaft des Bind-Objekts zu ändern.

Es funktioniert perfekt mit der INotifyPropertyChanged-Schnittstelle, aber wenn ich 1000 Objekte aktualisieren muss, dauert es sehr viel Zeit, denke ich, weil es die Steuerelemente einzeln aktualisieren muss.

Hat jemand einen Tipp für mich zu sagen, alle meine Objekte Hintergrundfarbe aktualisieren und dann die Bindung in einer Aufnahme statt Objekt für Objekt aktualisieren?

Danke,

Mat

+0

Sind Sie eine Property Veranstaltung mit den „Background“ Eigenschaftsnamen oder mit null Brennen? – Guy

+0

Im Allgemeinen sollten Sie ein ItemTemplate verwenden, um die Hintergrundfarbe Ihrer Elemente basierend auf einer Eigenschaft in ihnen zu stylen, anstatt die Farbe explizit als eine Farbe in dem Objekt zu haben, an das Sie binden. Beachten Sie auch, dass die Verwendung eines von VirtualizationStackPanel (z. B. ListBox) abgeleiteten Steuerelements anstelle von ItemsControl Ihnen die UI-Virtualisierung kostenlos ermöglicht (es werden nicht alle UI-Objekte aktualisiert, wenn der Benutzer sie nicht sehen kann). – Guy

+0

Ich feuere PropertyChanged-Ereignis mit dem Eigenschaftsnamen " Hintergrundfarbe" – Matx

Antwort

1

Wenn Sie Virtualisierung verwenden, wird es nur die Elemente zu aktualisieren, die sichtbar sind - in der Regel steuert Elemente werden nur Eigenschaftsänderungen auf den Artikel verfolgen, die derzeit sichtbar sind. Wenn Sie jedoch die Basis ItemsControl verwenden, ist die Virtualisierung standardmäßig deaktiviert. Um es einzuschalten, können Sie eine benutzerdefinierte Vorlage zur Verfügung stellen müssen, die ein ScrollViewer mit CanContentScroll auf True enthält, und Sie müssen auch ein VirtualizingStackPanel, entweder in der Steuervorlage verwenden, oder über die ItemsPanel - dies zeigt den früheren Ansatz:

Die Virtualisierung verbessert die Leistung bei einer großen Anzahl von Listenelementen auf verschiedene Arten. Es sollte Ihrem Szenario helfen, aber es kann auch andere Aspekte der Leistung verbessern. Es ist nicht ohne seine Probleme, aber ich würde es definitiv hier zuerst versuchen, bevor Sie andere Lösungen versuchen.

0

Ich fand endlich, warum es so lange dauerte, meine UI zu aktualisieren. Übrigens, was ich versuche zu erreichen, ist eine Art Tabellenkalkulation. Mein Zellencontainer war eine Grenze mit den sichtbaren Grenzen. Ich habe die Hintergrundfarbe für die Rahmenkontrolle basierend auf der Zellenauswahl aktualisiert. Durch das Deaktivieren der Grenzen der Border-Kontrolle wurde mein Problem sofort behoben. Die UI-Aktualisierungszeit ging von 4 bis 5 Sekunden in den Momentanmodus.

Vielen Dank für Ihre Antwort, ich werde immer noch versuchen, Ihren Vorschlag zu implementieren, um noch mehr mein Projekt zu verbessern.

Dank

Mat

Verwandte Themen