to pytanie pokaże mój brak zrozumienia oczekiwanego zachowania podczas wdrażania/używanie INotifyPropertyChanged:Kiedy zagnieżdżanie właściwości implementujących INotifyPropertyChanged musi zmienić profil obiektu macierzystego?
Pytanie brzmi - do wiązania się działać zgodnie z oczekiwaniami, gdy masz klasy, który sam implementuje INotifyPropertyChanged, które zagnieżdżone właściwości typu INotifyPropertyChanged są oczekiwane, aby wewnętrznie subskrybować powiadomienia o zmianach dla tych właściwości, a następnie włączyć powiadomienia? A może wiążąca infrastruktura, której spodziewamy się, że sprawi, że stanie się to niepotrzebne?
Na przykład (uwaga ten kod nie jest kompletny - tylko za zadanie zilustrować pytanie):
public class Address : INotifyPropertyChanged
{
string m_street
string m_city;
public string Street
{
get { return m_street; }
set
{
m_street = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Street"));
}
}
public string City
{
get { return m_city; }
set
{
m_city = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("City"));
}
}
public class Person : INotifyPropertyChanged
{
Address m_address;
public Address
{
get { return m_address = value; }
set
{
m_address = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Address"));
}
}
}
Tak więc, w tym przykładzie mamy zagnieżdżonych Adres obiektu w obiekcie osoby. Oba narzędzia implementują INotifyPropertyChanged, dzięki czemu zmiana ich właściwości spowoduje przesyłanie powiadomień o zmianach właściwości do subskrybentów.
Ale powiedzmy, że za pomocą wiązania ktoś subskrybuje powiadomienie o zmianie w obiekcie Person i "nasłuchuje" zmian właściwości adresu. Otrzymają powiadomienia, jeśli sama właściwość Adres zmieni się (przydzielony zostanie inny obiekt Adres), ale NIE BĘDZIE otrzymywać powiadomień, jeśli dane zawarte przez zagnieżdżony obiekt adresu (miasto lub ulica) zostaną zmienione.
Prowadzi to do pytania - czy wiąże się z tym infrastruktura wiążąca, czy też powinienem w ramach mojej realizacji Osoby subskrybować powiadomienia o zmianach w obiekcie adresu, a następnie propagować je jako zmiany w "Adresie"?
Jeśli dojdziesz do tego punktu, dziękuję za poświęcenie czasu na przeczytanie tego zdyszanego pytania?
Komentarz bardzo doceniany!
Phil
Znalazłem to pytanie po przeszukaniu. Wydaje mi się, że musisz ręcznie zasubskrybować zdarzenie PropertyChanged dla dzieci i wypuścić je do pracy w powiązaniach WPF. – loraderon
loraderon, jestem prawie pewien, że tak nie jest - przynajmniej w moich testach, okazało się, że tak jest. I nie ma żadnych informacji (które znalazłem), które wskazywałyby inaczej. Czy masz jakieś linki do jakichkolwiek informacji, które możesz podać w tej sprawie? Dzięki. Phil – Phil
Nie mam też żadnych linków. W moim bieżącym projekcie musiałem zdeformować zdarzenie PropertyChanged, aby działało. Jestem początkującym programistą w WPF i MVVM, więc może to być coś wyjątkowego w moim projekcie. – loraderon