[英]Databinding within ComboBox: Use Usercontrol to display each item
我有一个模型类Person和一个UserControl PersonComboBoxItem来显示它。
我想做的是,创建一个ComboBox
,其ItemsSource绑定到名为People的ObservableCollection<Person>
并使用我的PersonUserControl来显示集合中的每个Person。
<Grid>
<ComboBox SelectedIndex="0" ItemsSource="{Binding People}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<local:PersonComboBoxItem Person="{Binding ###how do I get the current item here to set the property 'Person' on my PersonComboBoxItem class? ### }" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
我已经按照这篇关于msdn上的数据绑定的伟大文章的方式工作了,但我无法过渡到我的设计方法。 随意批评它 - 我不确定,如果这是WPF方式的话。
此致,弗洛里安
PS:我可以从这里下载我的示例代码。
只需使用隐式DataTemplate
告诉WPF如何在可视树中遇到Person
对象时绘制它
<Grid>
<ComboBox SelectedIndex="0" ItemsSource="{Binding People}" DisplayMemberPath="Name">
<ComboBox.Resources>
<DataTemplate DataType="{x:Type local:Person}">
<local:PersonComboBoxItem />
</DataTemplate>
</ComboBox.Resources>
</ComboBox>
</Grid>
ComboBox
已经将您的Person
数据对象放在VisualTree
,可能看起来像这样:
<StackPanel>
<ContentPresenter>
<Person />
</ContentPresenter>
<ContentPresenter>
<Person />
</ContentPresenter>
<ContentPresenter>
<Person />
</ContentPresenter>
...
</StackPanel>
因此,您只需使用<local:PersonComboBoxItem />
替换<Person />
所在的位置。 UserControl
的DataContext
也将设置为Person
对象
此外, PersonItemComboBox
的DataContext
将始终为Person
类型,因此您甚至不需要Person
依赖项属性。
ItemTemplate
的DataContext
是当前的Person
,直接绑定到DataContext
,因此对Person
只使用{Binding}
。
您可以将UserControl
设计为直接使用当前的DataContext
而不是Person
属性,然后您不需要显式设置任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.