Sie wissen, wie eine TextBox seinen Inhalt geändert hat, wenn sich der DataContext ändert (nicht ersetzt, nur geändert)? Nun möchte ich genau wie die Benutzeroberfläche benachrichtigt werden, mit einer Art von Ereignis auf dem DataContext. Bis jetzt habe ich noch keine Möglichkeit gefunden, dies zu tun, und ich gebe gerade auf und abonniere einfach alle Ereignisse auf jedem INotifyPropertyChanged
in meinem DataContext. Ich weiß, dass es die DataContextChanged
/DataContextChanging
Klasse in der Window
Klasse gibt, aber bis jetzt kann ich es entweder nicht zum Funktionieren bringen, oder es wird nur ausgelöst, wenn der DataContext vollständig ersetzt wird. Gibt es eine Möglichkeit, dies zu tun?Wpf-Ereignis, wenn DataContext geändert wird
Antwort
Denken Sie darüber nach, was gefragt wird. Wenn sich eine Eigenschaft in einem Datenkontext ändert, wird ein general Ereignis ausgelöst.
Welcher Prozess ist verfügbar, der diesen Vorgang ausführen kann extern?
dezentrale Lösung
Eigenschaften bieten keine Benachrichtigung ändern, wenn sie manuell selbst sind so programmiert, dies zu tun; Daher ist INotifyPropertyChange
die Route, die normalerweise verwendet wird.
zentrale Lösung
Andernfalls wird ein separater Manager wird aus der Instanz reflektieren muß einen Snapshot aller Eigenschaften nehmen. Dann wird der Manager bei einem Timer die Instanz nach einem aktuellen Snapshot abfragen und diesen mit dem alten Snapshot vergleichen. Wenn eine Änderung erkannt wird, kann ein Ereignis ausgelöst werden und der neue Snapshot ersetzt den alten.
DataContextChanged
Ereignis nur ausgelöst, wenn die Datacontext des Fensters vollständig geändert hat (auf null oder eine neue Instanz, etc.). Ich glaube, Sie sind auf dem richtigen Weg, und in Ihrem ViewModel müssen Sie NotifyPropertyChanged
abonnieren. In den Event-Handler können Sie auf der entsprechende Eigenschaft wechseln wie folgt:
private void OnNotifyPropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.Property)
{
case "Property1":
break;
case "Property2":
break;
case "Property3":
break;
}
}
- 1. Wie wird der Wert geändert, wenn die Option geändert wird?
- 2. WPF-Abhängigkeitseigenschaften-Setter wird nicht ausgelöst, wenn PropertyChanged ausgelöst wird, aber der Quellwert nicht geändert wird
- 3. Resize jqGrid wenn Browser Größe geändert wird?
- 4. Benachrichtigung erhalten, wenn Fokusstufe geändert wird
- 5. ObjectDataSource zweimal erstellt, wenn Steuerelement geändert wird
- 6. SQL Server-Trigger, wenn Tabelle geändert wird
- 7. Bilder werden geändert, wenn UICollectionView gescrollt wird
- 8. Hintergrundbild "blinkt", wenn die Bildschirmausrichtung geändert wird
- 9. DropDownListFor wird keine Funktion aufrufen, wenn geändert
- 10. jQuery + Jeditable - erkennen, wenn Auswahl geändert wird
- 11. ngChange wird aufgerufen, wenn das Modell programmgesteuert geändert wird
- 12. RequiredFieldValidator wird nicht ausgelöst, wenn ControlToValidate visibility geändert wird
- 13. Actionbar Scherlock wird nicht aktualisiert, wenn die Ausrichtung geändert wird
- 14. BindingList.ListChanged Ereignis wird nicht ausgelöst, wenn die Eigenschaft geändert wird
- 15. google map wird erst geladen, wenn die Fenstergröße geändert wird
- 16. Wenn die Größe des Bildschirms geändert wird, wird die Schaltfläche
- 17. Wie ein Ereignis ausgelöst wird, wenn DataGrid.ItemsSource geändert wird
- 18. wenn Registerkarte geändert wird, welche Methode neben OnTabChange aufgerufen wird
- 19. Warum wird meine SQLite-Datenbank gelöscht, wenn sie geändert wird?
- 20. Aktualisieren Bindung sofort, wenn DataContext ändert
- 21. Variable eines Objekts wird geändert, wenn ein anderes Objekt geändert wird
- 22. LINQ DataContext
- 23. Farbe ändern wenn geändert
- 24. Instanzfunktionsvariable wird nicht geändert?
- 25. Standard Datacontext
- 26. Schaltfläche klicken Ereignis nicht geändert wird, wird
- 27. Android-Webansicht wird nicht konsistent skaliert, wenn Daten geändert werden
- 28. iOS: Benutzerdefinierte UISegmentedControl anpassen nicht, wenn Ausrichtung geändert wird
- 29. Validierung eines Feldes auslösen, wenn ein anderes Feld geändert wird
- 30. Aktion ausführen, wenn der UIButton-Status geändert wird
INotifyPropertyChanged genau ist, wie die TextBox es zu – Domysee
Dank @Domysee tut, was das ist, ich nach der Frage zu stellen realisiert. Das Fenster bindet sich nicht an den gesamten Kontext, sondern an die gebundenen Werte, die INotifyPropertyChanged sind. Na sicher! Danke vielmals! –