Как заставить RibbonComboBox синхронизироваться с ICollectionView.CurrentItem - PullRequest
0 голосов
/ 29 апреля 2019

Я устанавливаю RibbonComboBox, привязанный к ICollectionView в моей ViewModel. Когда я выбираю новый элемент, свойство CurrentItem объекта ICollectionView не изменяется.

Я попытался установить IsSynchronizedWithCurrentItem = "True" на RibbonGallery в ComboBox, но это не синхронизирует CollectionView.

<RibbonGroup Header="MyGroup" DataContext="{StaticResource ResourceKey=MyViewModel}">
    <RibbonComboBox>
        <RibbonGallery IsSynchronizedWithCurrentItem="True" SelectedValue="{Binding MyCollectionView/}">
            <RibbonGalleryCategory ItemsSource="{Binding MyCollectionView}" DisplayMemberPath="Name"/>
        </RibbonGallery>
    </RibbonComboBox>
</RibbonGroup>

Все работает так, как я и ожидал, ComboBox содержит полную коллекцию, я могу выбрать новый элемент из списка, однако в моем базовом коде CollectionView фактически не изменяет свое свойство CurrentItem, даже если SelectedValue на RibbonGallery изменена.

1 Ответ

0 голосов
/ 29 апреля 2019

Единственным решением, которое я смог найти, было дублирование функциональности CollectionView в моей модели представления с отдельным свойством, к которому я мог привязаться, что, к сожалению, учитывая, что стандартное поле со списком прекрасно справляется с этим без всего этого.Также стоит отметить, что в моем раннем XAML была ошибка с использованием SelectedValue вместо SelectedItem, однако это само по себе не вызывало проблему.

        public object SelectedItem
        {
            // This has to be done to cope with apparent bugs in the Ribbon controls.
            get => this.MyCollectionView.CurrentItem;
            set => this.MyCollectionView.MoveCurrentTo(value);
        }

Вышеописанное будет работать в одном направлении от пользовательского интерфейса, потребуется дополнительный кодбыть добавлен для обработки ICollectionView, изменяющего CurrentItem программным способом и вызывающего событие PropertyChanged.

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