Как использовать RibbonGallery с RibbonComboBox - PullRequest
0 голосов
/ 24 марта 2020

Итак, я хотел добавить RibbonCombobox к моей ленте в WPF. По какой-то причине, RibbonCombobox не имеет события selectedbreak. Я прочитал, что вы должны использовать RibbonGallery для события изменения выделения, поэтому я реализовал это

 <RibbonComboBox   Label="Equations" x:Name="EquationListComboToolbar"  ItemsSource="{Binding}">
                            <RibbonGallery x:Name="EquationListComboboxGallery" SelectedValue="{Binding  XPath=.}" />
                        </RibbonComboBox>

За сценой привязка выполняется следующим образом.

  EquationListComboToolbar.DataContext = ViewModel.EquationNames;
                this.Bind(ViewModel, vm => vm.SelectedEquation, v => v.EquationListComboboxGallery.SelectedItem).DisposeWith(cleanup);
                Observable.FromEventPattern(EquationListComboboxGallery, nameof(EquationListComboboxGallery.SelectionChanged)).Subscribe(e => ViewModel.SelectEquation(EquationListComboboxGallery.SelectedItem?.ToString()));

Во время выполнения я получаю следующее ошибка

«Необработанное исключение типа« System.InvalidOperationException », возникшее в коллекции элементов WindowsBase.dll, должно быть пустым перед использованием ItemsSource.» Когда приложение initalizez. Я знаю, что это что-то про Галерею, но я не могу понять, в чем проблема и как мне этого добиться.

Как мне сказали, я уже попробовал ответ, который был предложен

 <RibbonComboBox   Label="Equations" x:Name="EquationListComboToolbar"  ItemsSource="{Binding}">
                            <RibbonComboBox.ItemTemplate>
                                <DataTemplate>
                                    <RibbonGallery x:Name="EquationListComboboxGallery" SelectedValue="{Binding  XPath=.}" />
                                </DataTemplate>
                            </RibbonComboBox.ItemTemplate>
                        </RibbonComboBox>

Делая это, сделаем связывание невозможным

enter image description here

1 Ответ

1 голос
/ 26 марта 2020

Ах да. Библиотека лент Microsoft - это очень весело. К счастью, я был на этом пути раньше. Вот рабочий пример RibbonComboBox из одного из моих приложений, в комплекте с RibbonGallery:

<RibbonComboBox DropDownHeight="400">
    <RibbonGallery MaxColumnCount="1" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding MySelectedItemProperty}">
        <RibbonGalleryCategory ItemsSource="{Binding MyItemsSourceProperty}"/>
    </RibbonGallery>
</RibbonComboBox>

Я не совсем уверен, что это единственный способ сделать что-то, но я знаю этот способ работает. Обратите внимание, что я установил ItemsSource на RibbonGalleryCategory, а не на RibbonComboBox. Можно было бы использовать RibbonGallery без RibbonGalleryCategory, в этом случае вы бы установили ItemsSource на RibbonGallery, но я не проверял это.

Обратите внимание, у вас также есть возможность добавить несколько категорий галерей в один RibbonComboBox, например, так:

<RibbonComboBox DropDownHeight="400">
    <RibbonGallery MaxColumnCount="1" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding MySelectedItemProperty}">
        <RibbonGalleryCategory ItemsSource="{Binding MyFirstItemsSourceProperty}"/>
        <Separator/>
        <RibbonGalleryCategory ItemsSource="{Binding MySecondItemsSourceProperty}"/>
    </RibbonGallery>
</RibbonComboBox>

Вышеприведенное позволяет отображать несколько списков в одном раскрывающемся списке и позволяет пользователю выбрать один элемент из любого списка. Подобная функциональность, вероятно, объясняет, почему RibbonGalleryCategory существует в первую очередь.

...