Отключите PropertyChanged Event, пока объекты заполняются RawSQLQuery - PullRequest
1 голос
/ 16 июня 2019

В моем проекте XAF Winforms я использую следующее для заполнения своих непостоянных объектов System.Data.Entity

  // using System.Data.Entity.Infrastructure.DbRawSQLQuery
  List<myentity> results = connect.Database.SqlQuery<myentity>(sql).ToList();

myentity реализует System.ComponentModel.INotifyPropertyChanged

со свойствами типа

    private string _description;

    public string Description
    {
        get => _description;
        set
        {
            if (_description == value) return;
            _description = value;

            OnPropertyChanged(); // I don't want this called when loading
        }
    }

Я не хочу, чтобы OnPropertyChanges вызывался при первоначальном заполнении объектов

Как я могу предотвратить это? то есть как MyEntity может «знать», что описание задается начальной загрузкой, а не изменением пользователя?

Я думал, что _description будет нулевым при загрузке ... однако оно может быть нулевым по другим причинам.

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Если вы хотите установить свойство backing без вызова метода установки Description, вы можете установить _description напрямую, фактически обойдя вызов OnPropertyChanged().

0 голосов
/ 16 июня 2019

Создайте общедоступное свойство IsLoading и установите его значение true в инициализаторе myentity. Затем выключите его после заполнения коллекции

List<myentity> results = connect.Database.SqlQuery<myentity>(sql).ToList();
for each ( var obj in results) {  obj.IsLoading = false}

Измените OnPropertyChanged, чтобы PropertyChanged не срабатывал при загрузке.

private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    if (PropertyChanged == null) return;
    if (IsLoading) return;
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...