如何使用带 RibbonComboBox 的 RibbonGallery
How to use a RibbonGallery with a RibbonComboBox
所以我想在 WPF 中向我的功能区添加一个 RibbonCombobox。由于某种原因,RibbonCombobox 没有 selectionchanged 事件。我读到你应该使用 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 之前,项目集合必须为空。”当应用程序初始化时。我知道这是关于图库的问题,但我不知道是什么问题,我该如何实现。
按照建议,我已经尝试了建议的答案
<RibbonComboBox Label="Equations" x:Name="EquationListComboToolbar" ItemsSource="{Binding}">
<RibbonComboBox.ItemTemplate>
<DataTemplate>
<RibbonGallery x:Name="EquationListComboboxGallery" SelectedValue="{Binding XPath=.}" />
</DataTemplate>
</RibbonComboBox.ItemTemplate>
</RibbonComboBox>
这样做,将使绑定变得不可能
啊,是的。 Microsoft 功能区库非常有趣。幸运的是,我以前也走过这条路。这是我的一个应用程序中 RibbonComboBox
的工作示例,其中包含 RibbonGallery
:
<RibbonComboBox DropDownHeight="400">
<RibbonGallery MaxColumnCount="1" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding MySelectedItemProperty}">
<RibbonGalleryCategory ItemsSource="{Binding MyItemsSourceProperty}"/>
</RibbonGallery>
</RibbonComboBox>
我不完全确定这是做事的唯一方法,但我知道这种方法行得通。请注意,我在 RibbonGalleryCategory
上设置了 ItemsSource
,而不是 RibbonComboBox
本身。可能可以在没有 RibbonGalleryCategory
的情况下使用 RibbonGallery
,在这种情况下,您可以在 RibbonGallery
上设置 ItemsSource
,但我没有对此进行测试。
请注意,您还可以将多个图库类别添加到单个 RibbonComboBox
,如下所示:
<RibbonComboBox DropDownHeight="400">
<RibbonGallery MaxColumnCount="1" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding MySelectedItemProperty}">
<RibbonGalleryCategory ItemsSource="{Binding MyFirstItemsSourceProperty}"/>
<Separator/>
<RibbonGalleryCategory ItemsSource="{Binding MySecondItemsSourceProperty}"/>
</RibbonGallery>
</RibbonComboBox>
上面的内容让您可以在同一个下拉列表中显示多个列表,并允许用户 select 任何列表中的单个项目。像这样的功能可能是 RibbonGalleryCategory
首先存在的原因。
所以我想在 WPF 中向我的功能区添加一个 RibbonCombobox。由于某种原因,RibbonCombobox 没有 selectionchanged 事件。我读到你应该使用 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 之前,项目集合必须为空。”当应用程序初始化时。我知道这是关于图库的问题,但我不知道是什么问题,我该如何实现。
按照建议,我已经尝试了建议的答案
<RibbonComboBox Label="Equations" x:Name="EquationListComboToolbar" ItemsSource="{Binding}">
<RibbonComboBox.ItemTemplate>
<DataTemplate>
<RibbonGallery x:Name="EquationListComboboxGallery" SelectedValue="{Binding XPath=.}" />
</DataTemplate>
</RibbonComboBox.ItemTemplate>
</RibbonComboBox>
这样做,将使绑定变得不可能
啊,是的。 Microsoft 功能区库非常有趣。幸运的是,我以前也走过这条路。这是我的一个应用程序中 RibbonComboBox
的工作示例,其中包含 RibbonGallery
:
<RibbonComboBox DropDownHeight="400">
<RibbonGallery MaxColumnCount="1" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding MySelectedItemProperty}">
<RibbonGalleryCategory ItemsSource="{Binding MyItemsSourceProperty}"/>
</RibbonGallery>
</RibbonComboBox>
我不完全确定这是做事的唯一方法,但我知道这种方法行得通。请注意,我在 RibbonGalleryCategory
上设置了 ItemsSource
,而不是 RibbonComboBox
本身。可能可以在没有 RibbonGalleryCategory
的情况下使用 RibbonGallery
,在这种情况下,您可以在 RibbonGallery
上设置 ItemsSource
,但我没有对此进行测试。
请注意,您还可以将多个图库类别添加到单个 RibbonComboBox
,如下所示:
<RibbonComboBox DropDownHeight="400">
<RibbonGallery MaxColumnCount="1" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding MySelectedItemProperty}">
<RibbonGalleryCategory ItemsSource="{Binding MyFirstItemsSourceProperty}"/>
<Separator/>
<RibbonGalleryCategory ItemsSource="{Binding MySecondItemsSourceProperty}"/>
</RibbonGallery>
</RibbonComboBox>
上面的内容让您可以在同一个下拉列表中显示多个列表,并允许用户 select 任何列表中的单个项目。像这样的功能可能是 RibbonGalleryCategory
首先存在的原因。