poniedziałek, 17 grudnia 2012

70-511 Rozdział 6 - Binding - notyfikacja zmian

Bindując kontrolkę do właściwości klasy, nie sprawimy, że automatycznie po zmianie wartości pola w klasie, zostanie to odzwierciedlone w interfejsie użytkownika.
Aby taka funkcjonalność miała miejsce należy zaimplementować interfejs INotifyPropertyChanged:

Code:
  public interface INotifyPropertyChanged
  {
    event PropertyChangedEventHandler PropertyChanged;
  }

Interfejs ten zawiera jedno zdarzenie - PropertyChanged. Zdarzenie to należy wywołać dla każdej właściwości, która może się zmienić (wyjątkiem mogą być stałe które nie zmieniają się np. identyfikatory).
Przykład implementacji:

Code:
    public class Person : INotifyPropertyChanged
    {
        private string firstName;
        public string FirstName
        {
            get { return firstName; }
            set
            {
                firstName = value;
                PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
            }
        }

        private string lastName;
        public string LastName
        {
            get { return lastName; }
            set
            {
                lastName = value;
                PropertyChanged(this, new PropertyChangedEventArgs("LastName"));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }




ObservableCollection
Tak jak w przypadku właściwości, tak i dla kolekcji należy zaimplementować mechanizm powiadamiania o zmianach. WPF oferuje gotową kolekcję - ObservableCollection dzięki której mamy gotową implementację gotową od razu do użycia.
Dodając lub usuwając elementy z takiej kolekcji, bindowany element GUI reaguje i wyświetla bądź też usuwa nowo dodany element.

Kolekcje tego typu tworzymy w prosty sposób:

Code:
var PersonList = new ObservableCollection<Person>();

Częściej jednak stosuje się metodę dziedziczenia z ObservableCollection i dodanie wymaganego tworzącego kolekcję:

Code:
    public class PersonList : ObservableCollection<PersonList>
    {
        public PersonList()
        {
            //Inicjacla listy
        }
    }

Brak komentarzy:

Prześlij komentarz