Heim > Backend-Entwicklung > C++ > Wie kann eine ObservableCollection effizient über Änderungen der Elementeigenschaften benachrichtigt werden?

Wie kann eine ObservableCollection effizient über Änderungen der Elementeigenschaften benachrichtigt werden?

Mary-Kate Olsen
Freigeben: 2025-01-05 19:33:41
Original
176 Leute haben es durchsucht

How to Efficiently Notify an ObservableCollection of Item Property Changes?

So benachrichtigen Sie ObservableCollection, wenn sich Elemente ändern

Die ObservableCollection-Klasse in .NET bietet eine Möglichkeit, Änderungen an einer Sammlung zu verfolgen, z. B. das Hinzufügen oder Gegenstände entfernen. Änderungen an den Eigenschaften von Elementen innerhalb der Sammlung werden jedoch nicht automatisch erkannt.

Um dieses Problem zu beheben, gibt es benutzerdefinierte Implementierungen, wie z. B. die in der Frage erwähnte TrulyObservableCollection. Diese Klasse erweitert ObservableCollection und fügt Ereignishandler für Elemente hinzu, die zur Sammlung hinzugefügt und daraus entfernt werden. Es verfolgt auch Eigenschaftsänderungen an einzelnen Elementen.

Implementierung und Verwendung

Um TrulyObservableCollection zu verwenden, erstellen Sie zunächst eine Instanz und füllen diese mit Elementen:

public class MyViewModel
{
    public TrulyObservableCollection<MyType> MyItemsSource { get; set; }

    public MyViewModel()
    {
        MyItemsSource = new TrulyObservableCollection<MyType>();
        MyItemsSource.Add(new MyType() { MyProperty = false });
        MyItemsSource.Add(new MyType() { MyProperty = true });
        MyItemsSource.Add(new MyType() { MyProperty = false });
    }
}
Nach dem Login kopieren

Die Implementierung von TrulyObservableCollection löst jedoch immer dann ein Reset-Ereignis für die gesamte Sammlung aus, wenn sich eine Elementeigenschaft ändert. Dies kann Auswirkungen auf die Leistung haben und ist möglicherweise nicht das gewünschte Verhalten.

Alternativer Ansatz

Ein alternativer Ansatz besteht darin, Ereignishandler für Eigenschaftsänderungen für jedes Element in der Sammlung direkt zu registrieren :

public class MyViewModel
{
    public ObservableCollection<MyType> MyItemsSource { get; set; }

    public MyViewModel()
    {
        MyItemsSource = new ObservableCollection<MyType>();
        MyItemsSource.CollectionChanged += MyItemsSource_CollectionChanged;

        MyItemsSource.Add(new MyType() { MyProperty = false });
        MyItemsSource.Add(new MyType() { MyProperty = true });
        MyItemsSource.Add(new MyType() { MyProperty = false });
    }

    private void MyItemsSource_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.NewItems != null)
            foreach (MyType item in e.NewItems)
                item.PropertyChanged += MyType_PropertyChanged;

        if (e.OldItems != null)
            foreach (MyType item in e.OldItems)
                item.PropertyChanged -= MyType_PropertyChanged;
    }

    private void MyType_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "MyProperty")
            DoWork(); // Perform desired action
    }
}
Nach dem Login kopieren

Durch die Registrierung von Ereignishandlern für Eigenschaftsänderungen nur für Elemente, wenn diese zur Sammlung hinzugefügt oder daraus entfernt werden, zielt dieser Ansatz effektiver auf Änderungen von Elementeigenschaften ab und vermeidet gleichzeitig Leistungseinbußen.

Das obige ist der detaillierte Inhalt vonWie kann eine ObservableCollection effizient über Änderungen der Elementeigenschaften benachrichtigt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage