如何将ComboBoxItem添加到ListBox中的ComboBox(两者都使用数据绑定)

时间:2013-11-01 20:30:52

标签: wpf wpf-controls

我无法找到解决方案..我有一个ListBox,其DataTemplate有一个ComboBox。 DataBinding已到位,这是一种集合场景集合。我想预先准备一个'Select One Item'到所有ComboBoxes。我该怎么做?

编辑:真的不确定为什么你需要代码/ xaml来解决上述问题。但无论如何:

<Resources>
<ResourceDictionary>
            <DataTemplate x:Key="CategoriesDataTemplate">
                <StackPanel Orientation="vertical">
                    <TextBlock Text="{Binding Path=CategoryName}"></TextBlock>
                    <ComboBox ItemsSource="{Binding Path=Products}" Background="Transparent" SelectedValuePath="ProductId" DisplayMemberPath="ProductName">
                    </ComboBox>
                </StackPanel>
            </DataTemplate>
</ResourceDictionary>
</Resources>
.....
<Grid..>
                <ListBox ItemsSource="{Binding Categories}" ItemTemplate="{DynamicResource CategoriesDataTemplate}">
</Grid>

对于每个类别,我将在下面显示类别名称和其产品的组合框。用户可以为每个类别选择一个产品。对于每个这样的组合框,我希望第一项是“选择产品”或类似的东西。 注意:我希望看看是否有办法在没有预先挂起每个类别的每个产品系列中的项目(如果可能的话我不想弄乱源集合)。某种事件处理程序方法?

1 个答案:

答案 0 :(得分:0)

进一步挖掘后,得到了一个结合的解决方案:

hbarc's suggestionShimmy's solution以及kmatyaszek's answer。 Trick是使用CompositeCollection,因此我们可以为ComboBox使用静态和动态项目

我的ComboBox现在看起来像这样(我无法使用StackPanel资源。我是新手wpf,请评论StackPanel资源方法。):

                <StackPanel.Resources>
                    <CollectionViewSource Source="{Binding Path=Products}" x:Key="options"/>
                    <!--not used. doesn't seem to be working when used DummyOption is a property in ViewModel-->
                    <CollectionViewSource Source="{Binding DummyOption}" x:Key="dummyOption"/>
                </StackPanel.Resources>

                <ComboBox Background="Transparent" SelectedValuePath="ProductId" DisplayMemberPath="ProductName" SelectedIndex="0">
                    <ComboBox.ItemsSource>
                        <CompositeCollection>
                            <!--works-->
                            <models:Product ProductName="Select" ProductId="{x:Static sys:Guid.Empty}" .../>
                            <!--notworking-->
                            <!--<ComboBoxItem Content="{Binding dummyOption}" />-->
<!--notworking-->
<!--<ComboBoxItem Content="{Binding DummyOption}" />-->
                            <!--notworking-->
                            <!--<ComboBoxItem Content="{Binding Source={StaticResource ResourceKey=dummyOption}}" />-->
                            <CollectionContainer Collection="{Binding Source={StaticResource ResourceKey=Products}}" />
                        </CompositeCollection>
                    </ComboBox.ItemsSource>    
                </ComboBox>