Wpf 如何设置组合框的ItemsSource(如果它存在于ItemsScotrol中)

Wpf 如何设置组合框的ItemsSource(如果它存在于ItemsScotrol中),wpf,data-binding,Wpf,Data Binding,如果我们试图将组合框保存在ItemsCotrol中,则组合框项不会显示 我的要求是在ItemsControl中保留一个combobox,这样ItemsControl中就有5个combobox,每个combox都有一组我们可以选择的项。因此,我尝试使用下面的代码,并能够在ItemsControl中获取ComboBox,但ComboBox集合正在填充,请提供任何建议或解决方法 <xamDataPresenter:Field Label="Reqs" BindingType="Unbound"

如果我们试图将组合框保存在ItemsCotrol中,则组合框项不会显示

我的要求是在ItemsControl中保留一个combobox,这样ItemsControl中就有5个combobox,每个combox都有一组我们可以选择的项。因此,我尝试使用下面的代码,并能够在ItemsControl中获取ComboBox,但ComboBox集合正在填充,请提供任何建议或解决方法

<xamDataPresenter:Field Label="Reqs" BindingType="Unbound" Row="0" Column="4">
                        <xamDataPresenter:Field.CellValuePresenterStyle>
                            <Style TargetType="{x:Type xamDataPresenter:CellValuePresenter}">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type xamDataPresenter:CellValuePresenter}">
                                            <ItemsControl Name="I" ItemsSource="{Binding Path=DataItem.CollectionCount}">
                                            <ItemsControl.ItemTemplate>
                                                <DataTemplate>
                                                    <ComboBox ItemsSource="{Binding Path=DataItem.Collection}"/>
                                                </DataTemplate>
                                            </ItemsControl.ItemTemplate>
                                        </ItemsControl>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </xamDataPresenter:Field.CellValuePresenterStyle>
                    </xamDataPresenter:Field>

好的,我已经写了ItemsControl的最基本的部分,试图解释这些东西是如何工作的,希望您能够适应您对数据项的任何使用

因此,在您窗口的资源中,我创建了一个数据模板。这表示一个重复步骤,并将基于数据项。在本例中,我的DataItem有两个属性:DataItemPropertystring和SelectedItem。SelectedItem的数据类型与您计划在组合框中显示的数据类型相同

 <DataTemplate x:Key="StepTemplate">
    <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
        <TextBlock Text="{Binding Path=DataItemProperty}" Grid.Column="0"/>
        <ComboBox Grid.Column="1" ItemsSource="{Binding Path=DataContext.ItemsToSelectFrom, Mode=OneWay, RelativeSource={RelativeSource AncestorType=Window}}"
                          SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
</DataTemplate>
本例中的组合框将从code behind/viewmodel而不是DataItem中获取可用选项的列表,但当您选择某项时,它会更新DataItem上的SelectedItem属性。 然后显示您的项目:

  <ItemsControl 
        Focusable="False"
        ItemTemplate="{StaticResource StepTemplate}"
        ItemsSource="{Binding Path=Steps, Mode=OneWay}" />
因此,步骤是我的codebehind/viewmodel中的一个属性,它将决定显示多少行。 itemsControl允许您轻松添加重复的数据集,而无需多次写入相同的xaml。
希望能有所帮助?

组合框上缺少一个ItemsSource?您的组合框代码没有多大意义。为什么要创建一个TextBlock作为ComboBoxItem,而不是像使用ItemsControl那样向Combobox提供项目集合。因为当前,您唯一的项实际上是TextBlock元素本身,该项不是Polarity属性提供的对象!,您需要为ComboBox.SelectedItem提供TextBlock元素来选择它;当然,如果你仔细想想的话,这也是相当不现实的……呃。。。。这应该做什么:?这种对代码的编辑甚至没有什么意义……您是说每个combox都有一组我们可以选择的项目。因此,开始问自己:每个组合框的项目集合在哪里,因此,绑定如何到达这些集合?链接的屏幕截图显示的只是一些空的组合框。如果我看到的只是一张空组合框的图片,而没有一点关于其预期内容和用途的解释,那么我怎么知道组合框的内容和用途应该是什么呢。请参阅我的第二条评论,其中我回复您说,每个combox都将有一组我们可以选择的项目。两点:1。my codebehind/viewmodel中的属性-您的XAML未绑定到codebehind属性,两者不同。2.您不需要将Mode=OneWay,UpdateSourceTrigger=PropertyChanged放在绑定到无法更新源的属性上。它绑定到代码隐藏。我只是没有把它全部写出来,因为我不是为你做每件事。你也需要自己思考,否则你就学不到。我不是OP。我是一名专家,试图帮助你改进一个证明你对材料理解不足的答案。您是否假设代码将设置DataContext=this?这是非常糟糕的做法。