我想要一个wpf表单上的10个组合框的数组。XAML组合框的静态数量的控制数组
组合框的ItemsSource是相同的 - 可选项的ObservableCollection。
每个选定的项目将绑定到一个项目在不同的ObservableCollection,想象力称为“SelectedItems” ..
什么是做数组的最佳方式?我当然可以有10个独立的组合框,但这不会是非常优雅..
我不认为一个ItemsControl模板是我后,因为组合框的数量是静态的。
感谢
乔
我想要一个wpf表单上的10个组合框的数组。XAML组合框的静态数量的控制数组
组合框的ItemsSource是相同的 - 可选项的ObservableCollection。
每个选定的项目将绑定到一个项目在不同的ObservableCollection,想象力称为“SelectedItems” ..
什么是做数组的最佳方式?我当然可以有10个独立的组合框,但这不会是非常优雅..
我不认为一个ItemsControl模板是我后,因为组合框的数量是静态的。
感谢
乔
如果我理解你的权利,你有10个组合框使用相同的项目列表,但不同的数据源
在这种情况下,我能为这台共同属性,如ItemsSource
ComboBox中创建一个共同的风格(和SelectedItem
如果绑定对于所有项都是相同的),然后根据需要实际在表单上创建单独的ComboBoxes。
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type ComboBox}">
<!-- Set the binding to wherever your ItemsSource resides. In this
case,I'm binding to a static class called Lists and a static
property called ComboBoxItems -->
<Setter Property="ItemsSource"
Value="{Binding Source={x:Static local:Lists.ComboBoxItems}}" />
<!-- Only use this setter if your binding is the same everywhere -->
<Setter Property="SelectedItem" Value="{Binding SelectedItem}" />
</Style>
</StackPanel.Resources>
<ComboBox DataContext="{Binding Item1}" />
<ComboBox DataContext="{Binding Item2}" />
<ComboBox DataContext="{Binding Item3}" />
<ComboBox DataContext="{Binding Item4}" />
<ComboBox DataContext="{Binding Item5}" />
<ComboBox DataContext="{Binding Item6}" />
<ComboBox DataContext="{Binding Item7}" />
<ComboBox DataContext="{Binding Item8}" />
<ComboBox DataContext="{Binding Item9}" />
<ComboBox DataContext="{Binding Item10}" />
</StackPanel>
当然,如果您的组合框的数据源可以在集合中说,最好是他们和您使用ItemsControl
显示组合框
<ItemsControl ItemsSource="{Binding SelectedItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding }"
ItemsSource="{Binding Source={x:Static local:Lists.ComboBoxItems}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
每个选定的项目将绑定到一个项目在不同的ObservableCollection,想象力称为 'SelectedItems' ..
鉴于你有效结合一个集合,我会做一个ItemsControl模板,然后就这样对待它。除非你想自定义布局(即:这些不会一起安排在视图中),即使项目的数量总是“静态”,也可以简化设计。
如果您希望将这些项目单独排列在视图上,那么只需有10个组合框可能更合适。
感谢里德。'鉴于你有效地绑定到一个集合,我会做一个ItemsControl模板' - 每个组合框在开始时都是空的 - 只有当一个项目被选中时,这将被添加到ObservableCollection - 你的建议仍然是与ItemsControl? (我正在考虑将组合框放到面板中,因此它们被命令(可以这么说)) –
@ Joe.Net:是的 - 尽管“启动时为空”可能需要在启动时为“null” - 与在选择时适当地设置一个值。 OC
我个人认为,一个ItemsControl
它有一个ItemTemplate
其构造,每个ComboBox
是要走的路!你总是会准确地拥有其中的10个吗?
从MVVM的角度来看,我可以想象一个拥有选择视图模型集合的父视图模型。每个选择视图模型将包含可以选择的项目列表以及当前选定的项目。这个视图模型很容易绑定到你的视图。
感谢科林 - 是的10 - 但这将改变未来 - 但我想要一个简单和优雅的方式来改变它 - 因此我的控制阵列思考.. –
谢谢雷切尔 - '如果我理解你的权利,你有10个组合框与相同的项目列表,但不同的数据源' - 是的每个组合框将绑定到'SelectedItems'ObservableCollection中的单独项目,但'如果组合框的DataSource可以放入集合'的答案也是是的..抱歉的混乱 - 所以你会推荐ItemsControl? –
@ Joe.Net是的,我肯定会在你的情况下推荐一个'ItemsControl'。根据您在原始问题中所说的内容,您可以将ItemsControl.ItemCollection绑定到SelectedItems,并在ComboBox上设置ComboBox的SelectedItem =“{Binding}”,以将选定的项目绑定到集合。由于您使用的是ItemTemplate,因此您无需为ComboBox创建单独的样式 – Rachel
非常好,谢谢Rachel –