Не понимаю, как работает функция INotifyPropertyChangedC#

Место общения программистов C#
Ответить
Anonymous
 Не понимаю, как работает функция INotifyPropertyChanged

Сообщение Anonymous »

Реализация интерфейса INotifyPropertyChanged (соответствующее событие) и вспомогательный метод отлично работают в моем коде, но я действительно не понимаю, как это работает. Моя книга, на мой взгляд, плохо объясняет мне это, или я не очень умен.
У нас есть отдельный класс Car.cs, добавленный в мое решение со следующим кодом (пример из книги), и он должен работа в двусторонней привязке в отношении элемента управления TextBox в моем приложении WPF изменяется при изменении экземпляра объекта:

Код: Выделить всё

public class Car: INotifyPropertyChanged
{
private string _make;
private string _model;

public event PropertyChangedEventHandler PropertyChanged;

public Car()
{

}

public string Make
{
get { return _make; }
set
{
if (_make != value)
{
_make = value;
OnPropertyChanged("Make");
}
}
}
public string Model
{
get { return _model; }
set
{
if(_model != value)
{
_model = value;
OnPropertyChanged("Model");
}
}
}

private void OnPropertyChanged (string propertyName)
{
if (PropertyChanged != null)
{

this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}}
А вот код, который я сделал сам после изучения учебных материалов Microsoft, и он выглядит и работает лучше, по моему мнению:

Код: Выделить всё

public class Car: INotifyPropertyChanged
{
private string _make;
private string _model;

public event PropertyChangedEventHandler PropertyChanged;

public Car()
{

}

public string Make
{
get { return _make; }
set
{
_make = value;
OnPropertyChanged();
}
}
public string Model
{
get { return _model; }
set
{
_model = value;
OnPropertyChanged();
}
}

private void OnPropertyChanged ()
{
if (PropertyChanged != null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(""));
}
} }
Итак, у меня есть дурацкий вопрос относительно примера из книги (первого):
  • Что означает эта часть? Какой смысл проверять, не равно ли свойство значению (никогда раньше не видел ничего подобного, когда во время установки свойства вы проверяете это поле класса, проверяемое на то, что оно не равно значению)? Код работает и без него. Никаких объяснений этому в книге нет. Вот рассматриваемый код:
    set
    {
    if (_make != value)
    {
    _make = value;
    OnPropertyChanged("Make");
  • Почему, если вы будете писать имя свойства без скобок в упомянутый выше небольшой фрагмент кода (в подпункте один) тогда не получится? Я имел в виду, что если вы напишете «Make», то это не сработает, и вам следует написать «Make».
Спасибо за вперед!

Подробнее здесь: https://stackoverflow.com/questions/747 ... d-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»