如何设置ComboBox的ItemsSource(如果存在于ItemsCotrol中)

时间:2019-04-01 13:59:42

标签: wpf data-binding

如果我们尝试将该组合框保留在ItemsCotrol中,则组合框项目不会显示。 Please click here for understanding my requirement

我的要求是将组合框保留在ItemsControl中,以便ItemsControl可以在其中包含5个组合框,并且每个combox都将具有可供选择的项的集合。因此,为此,我尝试使用以下代码并能够在ItemsControl中获取组合框,但组合框集合已满,请提供任何建议或解决方法。

<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>

1 个答案:

答案 0 :(得分:-2)

好吧,我已经写了ItemsControl的最基本知识,试图解释这些事情是如何工作的,希望您可以将其适应您用于数据项的任何情况。

因此,在窗口的资源中,我创建了一个数据模板。这表示重复步骤,并将基于DataItem。在这种情况下,我的DataItem具有2个属性:DataItemProperty(string)和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>

此示例中的组合框将从/ viewmodel后面的代码而不是DataItem中获取可用选项的列表,但是当您选择某些内容时,它将更新DataItem上的SelectedItem属性。 然后显示您的物品:

  <ItemsControl 
        Focusable="False"
        ItemTemplate="{StaticResource StepTemplate}"
        ItemsSource="{Binding Path=Steps, Mode=OneWay}" />

因此,Steps是我的代码后面/视图模型中的一个属性,它将确定显示多少“行”。 itemsControl使您可以轻松添加重复的数据集,而不必多次写入同一xaml。 希望有帮助吗?