WPF C # Как выбрать между двумя коллекциями для использования в GridView на основе активных кнопок - PullRequest
0 голосов
/ 23 января 2019

Я хочу иметь возможность связывать две разные коллекции NewItems и OldItems QueryAbleCollection в качестве ItemsSource в зависимости от того, какая радиоактивная кнопка активна,

, скажем, у нас есть кнопка с именем NewItems и OldItems, и каждая кнопка должна изменить, какую коллекциюItemssource в GridView следует использовать.

Как я могу добиться этого самым простым способом с XAML и C # ViewModel?

Под моей попыткой, но я не уверен, что самая разумная вещь - назначить SelectedCollection другую коллекцию.Может ли кто-нибудь поправить меня, если это хороший подход или предложить лучший подход?Прямо сейчас у меня есть две кнопки, которые просто переключали isOldItems между true и false.

    private bool isOldItems;
    public bool isOldItems
    {
        get
        {
            return this.isOldItems;
        }
        set
        {
            this.isOldItems= value;
            this.OnPropertyChanged("isOldItems");
            this.OnPropertyChanged("SelectedCollection");
        }
    }


    private QueryableCollectionView _selectedCollection;
    public QueryableCollectionView SelectedCollection
    {
        get
        {
            if (isOldItems== true)
                return SelectedCollection= this.OldItemsCollection;
            else
                return SelectedCollection= this.NewItemsCollection;
        }
        set
        {
            if (this._selectedCollection!= value)
            {
                this._selectedCollection= value;
                this.OnPropertyChanged("SelectedCollection");
            }
        }
    }

1 Ответ

0 голосов
/ 23 января 2019

Я не вижу явного огромного недостатка в том, что вы делаете, если это коллекции одного типа. В общем, в любом случае.

Это ссылка, которую вы устанавливаете, поэтому, если вы установите SelectedCollection в NewItemsCollection, то он будет указывать на NewItemsCollection. Добавьте элемент в SelectedCollection и добавьте его в NewItemsCollection (или в зависимости от того, какой он установлен).

НО Если у вас есть проверка if, это будет означать, что она никогда не устанавливает переменную поддержки и поднимает свойство, измененное из setter. Объекты одного и того же типа всегда равны, если вы не переопределите их. Вы

if (this._selectedCollection!= value)

Не собирается проверять каждый элемент в коллекции и видеть, отличаются ли они, или название вещи, которую вы установили. Что он будет делать, это сравнить типы. Предположительно, они всегда будут равны.

Удалите это, если проверьте сеттер.

...