簡體   English   中英

ComboBox中的數據綁定:使用Usercontrol顯示每個項目

[英]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 />所在的位置。 UserControlDataContext也將設置為Person對象

此外, PersonItemComboBoxDataContext將始終為Person類型,因此您甚至不需要Person依賴項屬性。

ItemTemplateDataContext是當前的Person ,直接綁定到DataContext ,因此對Person只使用{Binding}

您可以將UserControl設計為直接使用當前的DataContext而不是Person屬性,然后您不需要顯式設置任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM