Я проверяю INotifyPropertyChanged, но как я могу использовать его? - PullRequest
2 голосов
/ 20 июня 2010

В этом сообщении я нашел INotifyPropertyChanged, и я проверяю, что это пример , но я замечаю, что могу сделать то же самое без инструмента INotifyPropertyChanged и более, я могу определить свое событие и сделай то же самое ...

Например, в

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

Я могу поставить любую строку, и она может быть передана без какой-либо проверки, и я уже делаю что-то подобное, как показано ниже

public delegate void ChangeHandler(string item);
public class DemoCustomer2 
{
    // These fields hold the values for the public properties.
    private Guid idValue = Guid.NewGuid();
    private string customerNameValue = String.Empty;
    private string phoneNumberValue = String.Empty;

    public event ChangeHandler OnChange;
    void CallOnChange(string item)
    {
        if (OnChange != null)
            OnChange(item);
    }

    // The constructor is private to enforce the factory pattern.
    private DemoCustomer2()
    {
        customerNameValue = "Customer";
        phoneNumberValue = "(555)555-5555";
    }

    // This is the public factory method.
    public static DemoCustomer2 CreateNewCustomer()
    {
        return new DemoCustomer2();
    }

    // This property represents an ID, suitable
    // for use as a primary key in a database.
    public Guid ID
    {
        get
        {
            return this.idValue;
        }
    }

    public string CustomerName
    {
        get
        {
            return this.customerNameValue;
        }
        set
        {
            if (value != this.customerNameValue)
            {
                this.customerNameValue = value;
                CallOnChange("CustomerName");
            }
        }
    }

    public string PhoneNumber
    {
        get
        {
            return this.phoneNumberValue;
        }
        set
        {
            if (value != this.phoneNumberValue)
            {
                this.phoneNumberValue = value;
                CallOnChange("PhoneNumber");
            }
        }
    }
}

Я не нашел в этом полезного использования, но кто-нибудь может мне помочь, если есть какое-нибудь действительно полезное использование для них?

Ответы [ 2 ]

2 голосов
/ 20 июня 2010

Самым большим преимуществом реализации INotifyPropertyChanged является стандартная интеграция с привязкой данных. В частности, WPF, технология MS UI, сильно зависит от привязки данных и имеет хорошую поддержку для классов, реализующих INotifyPropertyChanged (и INotifyCollectionChanged).

1 голос
/ 20 июня 2010

Важным для INotifyPropertyChanged является не реализация, а тот факт, что теперь существует "официальный" способ работы в среде. По сути, это дает вам обещание, что если вы реализуете интерфейс, ваши классы реализации будут работать со всеми встроенными и сторонними компонентами, которые его используют. Когда вы разыгрываете свое собственное решение, нет никакого способа узнать, будет ли ваш код хорошо ладить с другими.

...