набор не вызывается - PullRequest
0 голосов
/ 22 мая 2018

В моем приложении C # WPF у меня есть следующее:

    ObservableCollection<SpecialtyFees> _SpecialtyFeeEGG;
    public ObservableCollection<SpecialtyFees> SpecialtyFeeEGG
    {
        get { return _SpecialtyFeeEGG; }
        set
        {
            if (_SpecialtyFeeEGG == value)
                return;

            _SpecialtyFeeEGG = value;
            RaisePropertyChanged("SpecialtyFeeEGG");
        }
    }

Когда выполняется следующая строка, вызывается метод SET, как я и ожидал:

        SpecialtyFeeEGG = new ObservableCollection<SpecialtyFees>();

Однакопозже в коде, когда specialtyFee добавлен в SpecialtyFeeEGG, он НЕ вызывается, и я ожидал, что он будет вызван.Чего мне не хватает?

        foreach (var item in Specialties)
        {
            SpecialtyFees specialtyFee = new SpecialtyFees();
            specialtyFee.SpecialtyCode = item.SpecialtyCode;
            specialtyFee.CurrentTotal = 0;
            specialtyFee.BidTotal = 0;
            specialtyFee.BidDifference = 0;
            if (specialtyFee.SpecialtyCode.Length == 3)
            {
                SpecialtyFeeEGG.Add(specialtyFee);
            }
        }

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Объект ObservableCollection<SpecialityFees> фактически не меняется, вы просто добавляете к его элементам, поэтому он не будет запускать метод set для самого объекта.

Вам нужно будет использовать SpecialityFeeEGG_CollectionChanged метод для захвата дополнения к коллекции.

0 голосов
/ 22 мая 2018

Правильный способ использования ObservableCollection заключается в следующем:

private ObservableCollection<SpecialtyFees> _SpecialtyFeeEGG 
   = new ObservableCollection<SpecialtyFees>();

public ObservableCollection<SpecialtyFees> SpecialtyFeeEGG
{
    get { return _SpecialtyFeeEGG; }
}

При использовании привязки в WPF вам необходимо каждый раз уведомлять об изменении источника привязки.Или иначе (например, в этом случае) значение всегда ссылается на значение, указанное в конструкторе или инициализаторе поля (new ObservableCollection<SpecialtyFees>()).А поскольку вам не нужно переключаться на источник, наблюдаемая коллекция позаботится о добавлении / удалении / изменениях, внесенных в коллекцию.

В этом случае не требуется ни метод Set, ни RaisePropertyChanged.Однако, только если необходимо изменить источник, он будет работать так, как вы ожидали, чтобы обработать изменение источника коллекции.

0 голосов
/ 22 мая 2018

Вы редактируете только объект, а не указатель / ссылку на этот определенный объект.Это то же самое, что сказать, что у вас есть Список х.Если вы установите x = new List(); Вы фактически создаете новый список.При добавлении чего-либо в этот список ссылочный адрес x не изменяется.В то время как содержание х делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...