我想在wpf表单上有一组10个组合框。
组合框的ItemsSource是相同的 - 可选项的ObservableCollection。
每个选定的项目将绑定到不同的ObservableCollection中的项目,富有想象力地称为“SelectedItems”..
进行阵列的最佳方法是什么?我当然可以有10个单独的组合框,但这不是很优雅..
我不认为ItemsControl模板是我所追求的,因为组合框的数量是静态的。
由于
乔
答案 0 :(得分:3)
如果我理解你的话,你有10个ComboBox拥有相同的项目列表,但数据源不同
在这种情况下,我可以为ComboBox创建一个公共样式,它设置公共属性,例如ItemsSource
(和SelectedItem
,如果所有项目的绑定相同),然后实际创建根据需要在表单上单独的ComboBox。
<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>
当然,如果您的ComboBox的DataSource可以放在一个集合中,那么它们最好是并且您使用ItemsControl
来显示ComboBoxes
<ItemsControl ItemsSource="{Binding SelectedItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding }"
ItemsSource="{Binding Source={x:Static local:Lists.ComboBoxItems}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 1 :(得分:2)
每个选定的项目将绑定到不同的ObservableCollection中的项目,富有想象力地称为“SelectedItems”..
鉴于你有效地绑定了一个集合,我会做一个ItemsControl模板,然后就这样对待它。除非您想要自定义布局(即:这些不会在视图中排列在一起),这将简化设计,即使项目数始终是“静态”。
如果你想在视图上单独排列项目,那么只有10个组合框可能更合适。
答案 2 :(得分:2)
我个人认为ItemsControl
ItemTemplate
构建了每个ComboBox
的{{1}}是的方法!你总是会有10个吗?
从MVVM的角度来看,我可以想象一个父视图模型,它具有一组选择视图模型。每个选择视图模型都将包含可以选择的项目列表以及当前选定的项目。此视图模型将轻松绑定到您的视图。
答案 3 :(得分:-1)
不知道为什么你需要这个...这对于决定如何做到这一点可能很重要......这是我的抨击。
为什么不设计UI,为每个ComboBox命名,创建一个List并在运行时将每个Add添加到该List中?