Сортировка ObservableCollection не меняет TreeView - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть проект UWP c#, где я объявляю ObservableCollection элементов, на странице есть TreeView, привязанный к коллекции. Когда я загружаю его, все в порядке, и TreeView заполняется.

Затем я добавил кнопку для сортировки по возрастанию и по убыванию, НО, когда я сортирую его, TreeView не изменяется; Я прочитал много похожих вопросов, но не смог найти решение.

В одном из них решение было:

        public ObservableCollection<MTreeViewPaz> Patients { get; private set; } = new ObservableCollection<MTreeViewPaz>();

... в коде AppBar позади на the AppBarToggleButton_Checked:

                    Patients = new ObservableCollection<MTreeViewPaz>(
                        from i in Patients orderby i.Data descending, i.Cognome, i.Nome select i);

Представление привязано к пациентам:

           <winui:TreeView
                x:Name="treeView"
                Grid.Row="1"
                Expanding="treeView_Expanding"
                ItemInvoked="OnItemInvoked"
                ItemTemplate="{StaticResource ItemTemplate}"
                ItemsSource="{x:Bind Patients}"
                SelectionMode="Single" />

Но ничего не происходит. Я проверил с помощью отладчика, и элементы Patients различаются до и после сортировки. Так что эта часть работает нормально, только не отображается.

Даже она должна быть бесполезной, поскольку ObservableCollection должна вызывать события, которые я даже пытался сделать так:

       private ObservableCollection<MTreeViewPaz> _Patients;

        public ObservableCollection<MTreeViewPaz> Patients
        {
            get { return _Patients; }
            private set { Set(ref _Patients, value); }
        }

       private void Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
        {
            if (Equals(storage, value))
            {
                return;
            }

            storage = value;
            OnPropertyChanged(propertyName);
        }

        private void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

Но это не работает

1 Ответ

0 голосов
/ 21 апреля 2020

Сортировка ObservableCollection не меняет TreeView

Для проверки кода выше я обнаружил, что вы использовали режим по умолчанию x:Bind (один раз). И он не будет отвечать на сброс Patients. пожалуйста, отредактируйте выше для OneWay Mode.

ItemsSource="{x:Bind DataSource, Mode=OneWay}"
...