NotifyPropertyChanged przy każdym polu

0

Witam

Spotkałam się z taką konstrukcją, w której przy seterze każdego pola wywoływany jest NotifyPropertyChanged.

    public string CustomerName
    {
        get
        {
            return this.customerNameValue;
        }

        set
        {
            if (value != this.customerNameValue)
            {
                this.customerNameValue = value;
                NotifyPropertyChanged("CustomerName");
            }
        }
    }

    public string PhoneNumber
    {
        get
        {
            return this.phoneNumberValue;
        }

        set
        {
            if (value != this.phoneNumberValue)
            {
                this.phoneNumberValue = value;
                NotifyPropertyChanged("PhoneNumber");
            }
        }
    }

Nie wygląda to komicznie gdy klasa ma 2 pola. Co jednak gdy ma 20 albo 50 pól? Czy każde pole musi być w taki sposób oprogramowane???

0

Zaimplementuj sobie interfest INotifyPropertyChanged w taki sposób żeby nie musieć tego pisać za każdym razem.

0

Programowanie aspektowe. PostSharp (gotowe rozwiązanie, ale płatne), Castle DynamicProxy (do zaimplementowania albo poszukania w necie gotowca).

0

Hej!

Polecam https://www.nuget.org/packages/Fody/

 <?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <PropertyChanged />
</Weavers>

Maciej

0
mactok napisał(a):

Hej!

Polecam https://www.nuget.org/packages/Fody/

 <?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <PropertyChanged />
</Weavers>

Maciej

I to zrobi mi to wywołanie przy każdym polu?

0

Po pierwsze - jeśli klasa ma 20 lub 50 pól które mają publiczny setter to coś jest baaaardzo nie tak z architekturą Twojej aplikacji

0
Krwawy Mleczarz napisał(a):

Po pierwsze - jeśli klasa ma 20 lub 50 pól które mają publiczny setter to coś jest baaaardzo nie tak z architekturą Twojej aplikacji

Dlaczego? Załóżmy że chcesz przechować dane nt wymiarów ciała różnych ludzi, długości rąk, nóg itp. Każdy obiekt ma wypełnione każde pole. Jak to zapiszesz? EAV nie ma sensu.

0

Jeśli piszesz w Visual Studio to istnieją dodatki (jak choćby ReSharper), które potrafią automatycznie generować ten kod dla każdej właściwości.

0

W nowym C# (v 5) istnieje atrybut callermembername, który dużo ułatwia.
Istnieje wiele frameworków np catel albo caliburn które ułatwiają pracę bardziej.
Wspomniany wyżej foody i autofac sprawiają że implementacja INotifyPropertyChnged sprowadza sie do napisania atrybutu. Jednak początkujący programiści mogą mieć problemy ze tym że czasami wywala im się kod którego nie ma.

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