1

我无法找到解决方案。我有一个 ListBox,它的 DataTemplate 有一个 ComboBox。DataBinding 就位,这是一种集合场景的集合。我想为所有组合框预先设置一个“选择一个项目”。我怎么做?

编辑:真的不知道为什么你需要代码/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>

对于每个类别,我将在下面显示类别名称和其产品的组合框。用户可以为每个类别选择一种产品。对于每个这样的组合框,我希望第一项是“选择产品”或类似的东西。注意:我正在寻找是否有一种方法可以做到这一点,而无需在每个类别中的每个产品集合中预先添加一个项目(如果可能,我不希望弄乱源集合)。某种事件处理程序方法?

4

1 回答 1

0

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

hbarc 的建议Shimmy 的解决方案以及kmatyaszek 的回答。诀窍是使用 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>
于 2013-11-01T23:31:34.720 回答