Sobes.tech
Junior

Do czego służy interfejs INotifyPropertyChanged?

sobes.tech AI

Odpowiedź od AI

Interfejs INotifyPropertyChanged służy do powiadamiania klientów (zazwyczaj elementów interfejsu użytkownika), że wartość właściwości uległa zmianie. Jest to kluczowy mechanizm do implementacji wzorca MVVM (Model-View-ViewModel) i wiązania danych w frameworkach UI, takich jak WPF.

Gdy wartość właściwości w klasie implementującej ten interfejs się zmienia:

  1. Wywoływany jest obsługiwacz zdarzenia PropertyChanged.
  2. Obsługiwacz otrzymuje argumenty typu PropertyChangedEventArgs, zawierające nazwę zmienionej właściwości.
  3. Elementy UI lub inni klienci, którzy subskrybują to zdarzenie, otrzymują powiadomienie i mogą zaktualizować swoje wyświetlanie zgodnie z nową wartością.

Przykład implementacji:

using System.ComponentModel;
using System.Runtime.CompilerServices;

public class MyData : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value) // Sprawdzamy, czy wartość faktycznie się zmieniła
            {
                _name = value;
                OnPropertyChanged(); // Wywołujemy metodę powiadomienia
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

W .NET 6 i nowszych można używać atrybutu [ObservableProperty] z pakietu CommunityToolkit.Mvvm do generowania kodu szablonowego:

using CommunityToolkit.Mvvm.ComponentModel;

public partial class MyData : ObservableObject
{
    [ObservableProperty]
    private string _name;
}