RaisePropertyChanged во вложенной коллекции ObservableCollection не обновляется - PullRequest
0 голосов
/ 18 марта 2019

Я сейчас использую вложенную ObservableCollection для заполнения строк DataGrid внутренней ObservableCollection, содержащей информацию о каждой ячейке, следующим образом:

    public class MemoryTable : INotifyPropertyChanged
    {
        string _Address;
        public string Address
        {
            get
            {
                return _Address;
            }
            set
            {
                if (_Address != value)
                {
                    _Address = value;
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        void RaisePropertyChanged(string prop)
        {
            if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
        }

        bool _NextRowOverflow;
        public bool NextRowOverflow
        {
            get
            {
                return _NextRowOverflow;
            }
            set
            {
                if (_NextRowOverflow != value)
                {
                    _NextRowOverflow = value;
                }
            }
        }
        private ObservableCollection<DataAssets> _DataSpace;
        public ObservableCollection<DataAssets> DataSpace
        {
            get
            {
                return _DataSpace;
            }
            set
            {
                _DataSpace = value;
                RaisePropertyChanged("DataSpace");
            }
        }

        public MemoryTable()
        {
            DataSpace = new ObservableCollection<DataAssets>();
        }

        public class DataAssets : INotifyPropertyChanged
        {
            string _Addresses;
            public string Addresses
            {
                get
                {
                    return _Addresses;
                }
                set
                {
                    if (_Addresses != value)
                    {
                        _Addresses = value;
                        RaisePropertyChanged("Addresses");
                    }
                }
            }

            string _Values;
            public string Values
            {
                get
                {
                    return _Values;
                }
                set
                {
                    if (_Values != value)
                    {
                        _Values = value;
                        RaisePropertyChanged("Values");
                    }
                }
            }

            string _ToolTip;
            public string ToolTip
            {
                get
                {
                    return _ToolTip;
                }
                set
                {
                    if (_ToolTip != value)
                    {
                        _ToolTip = value;
                        RaisePropertyChanged("ToolTip");
                    }
                }
            }

            Brush _Color;
            public Brush Color
            {
                get
                {
                    return _Color;
                }
                set
                {
                    if (_Color != value)
                    {
                        _Color = value;
                        RaisePropertyChanged("Color");
                    }
                }
            }

            string _ConvertedValue;
            public string ConvertedValue
            {
                get
                {
                    return _ConvertedValue;
                }
                set
                {
                    if (_ConvertedValue != value)
                    {
                        _ConvertedValue = value;
                        RaisePropertyChanged("ConvertedValue");
                    }
                }
            }

            public event PropertyChangedEventHandler PropertyChanged;
            void RaisePropertyChanged(string prop)
            {
                if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
            }
        }
    }
}

И хочу, чтобы он обновлялся всякий раз, когда я изменяю одно из значений в классе DataAsset, однако всякий раз, когда я изменяю значение таким способом:

NextRow.DataSpace[i].Color = Brushes.Yellow;

Ни одна из ячеек не обновляется. Обходное решение, которое я сделал для этого, - очистить и переписать всю коллекцию ObservableCollection следующим образом:

            ObservableCollection<MemoryTable> Temp = new ObservableCollection<MemoryTable>();
        foreach (var item in MemoryTable)
        {
            if (Temp.IndexOf(item) < 0)
            {
                Temp.Add(item);
            }
        }

        MemoryTableDisplay.Clear();
        foreach (var item in Temp)
        {
            if (MemoryTableDisplay.IndexOf(item) < 0)
            {
                MemoryTableDisplay.Add(item);
            }
        }

Этим методом я могу заставить пользовательский интерфейс отображать изменения, однако при переходе к работе с большим набором данных этот метод занимает слишком много времени, возможно ли иметь внутренние свойства, чтобы вызвать обновить всю коллекцию ObservableCollection?

Спасибо!

1 Ответ

0 голосов
/ 18 марта 2019

Пожалуйста, попробуйте это.

NextRow.DataSpace[i].Color = Brushes.Yellow;

После записи еще одного утверждения, подобного этому.

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