[英]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.