ObservableCollection binden an ein DataGrid nach der Zuweisung des neuen Wertes
Scheint es sich um ein einfaches problem, aber ich kann nicht ankommen es zu wirken.
Ich habe ein UserControl mit der folgenden Eigenschaft:
public ObservableCollection<HL7Message> source {get; set;}
Und den folgenden Binden:
<data:DataGrid x:Name="dgMessages" Grid.Row="2" AutoGenerateColumns="True"
ItemsSource="{Binding source}" ></data:DataGrid>
einer übergeordneten UserControl habe ich den Wert auf eine Schaltfläche klicken Sie auf:
messagesGrid.source = src; //messagesGrid is the name of the UserCntrol above
Erwarte ich, dass mein DataGrid aktualisiert werden, aber es ist nicht. Können Sie bitte zeigen Sie auf, was ich falsch mache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auto-Eigenschaften leider nicht unterstützen, ändern-Benachrichtigung. Also das DataGrid wird nicht wissen, dass die collection geändert wurde wenn Sie die
source
-Eigenschaft.Eine Möglichkeit ist die Umsetzung INotifiyPropertyChanged für die
messagesGrid.source
-Eigenschaft:Bitte beachten Sie, dass ich geschrieben habe den ersten Brief von
Source
in Großbuchstaben, weil in .net, Eigenschaften sind im Allgemeinen so geschrieben. Sie müssen ändern Sie Ihre verbindliche entsprechend, denn Bindungen sind groß-und Kleinschreibung.dgMessages.ItemsSource = _source;
in die "set" - Teil mein EigentumINotifyPropertyChanged
- Schnittstelle, und nur darumdgMessages.ItemsSource = _source;
in den Satz (du hast Recht, ich sollte verwenden Sie eine if-Anweisung gibt es in jedem Fall), weil alles, was ich tun müssen, ist im Grunde zu aktualisieren meinem dataGrid mit dem, was ObservableCollection<> wird übergeben.Das problem ist, dass, wenn die Referenz für
source
änderungen auf Ihre Schaltfläche klicken, da gibt es nichts zu sagen, die UI selbst aktualisieren. Sie müssen entweder machensource
eine Abhängigkeitseigenschaft, oder implementierenINotifyPropertyChanged
, und rufen Sie dasPropertyChanged
Veranstaltung in den setter fürsource
.