Reakcja na zmianę właściwości obiektu znajdującego się w kolekcji

0

Cześć, mam problem z obslugą zdarzeń związanych ze zmianą właściwości obiektu znajdującego się w kolekcji.

mam klase Uczen,klase Uczniowie i główny program

class Uczen
    {
        string imie;

        public string Imie
        {
            get { return imie; }
            set { imie = value; }
        }
        int numer;

        public int Numer
        {
            get { return numer; }
            set { numer = value; }

        }
    }

class Uczniowie
    {
        List<Uczen> listaUczniow = new List<Uczen>();
        public void ZmienNumer(int i, int nowynumer)
        {
            listaUczniow[i].Numer = nowynumer;
         }
        //...
       //...
    }

class Program
    {
        static void Main(string[] args)
        {
             Uczniowie lista = new Uczniowie();
               //uzupełnienie listy, itp
             lista.ZmienNumer(4, 23);
             //dalsza czesc programiku  
        }
     }
 

Co teraz zrobić, żeby po każdej takiej zmianie numeru pojawiało się zdarzenie i obsługą tego zdarzenia było by wypisanie np w konsoli np "Jan Kowalski, zmiana numeru z 1 na 23? Próbowałem już zastosować interfesj INotifyPropertychanged ale tam mamy tylko informację o nazwie właściwości jaka się zmianiła, a ja potrzebuję oprócz nazwy właściwości również starą i nową jej wartość. Jak to rozwiązać?

0

Zamiast zwykłej listy użyj ObservableCollection<T>.

0
Signum napisał(a):

Zamiast zwykłej listy użyj ObservableCollection<T>.

ObservableCollection da jedynie informacje o zmianach na poziomie listy, a nie wewnątrz jej elementów.
W tym przypadku najlepiej samemu stworzyć zdarzenie, które zwróci stosowne informacje.

class ZmianaNumeruEventArgs : EventArgs
{
    public Uczen Uczen { get; set; }
    public int StaryNumer { get; set; }
}

class Uczniowie
{
    List<Uczen> listaUczniow = new List<Uczen>();
    public event EventHandler<ZmianaNumeruEventArgs> ZmianaNumeru;

    public void Dodaj(Uczen uczen) { listaUczniow.Add(uczen); }

    public void ZmienNumer(int i, int nowynumer)
    {
        Uczen uczen = listaUczniow[i];
        ZmianaNumeruEventArgs ea = new ZmianaNumeruEventArgs()
        {
            Uczen = uczen,
            StaryNumer = uczen.Numer
        };
        uczen.Numer = nowynumer;
        if (ZmianaNumeru != null)
            ZmianaNumeru(this, ea);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1