DataTemplate for TextBlock和XAML中的ComboBox

时间:2016-08-23 13:28:53

标签: wpf xaml combobox datatemplate

我有这个XAML代码:

<Window x:Class="New_app_2.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2" Height="400" Width="500">
    <Grid>
        <StackPanel Orientation="Horizontal">
            <ItemsControl ItemsSource="{Binding TestList}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding }"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
            <ComboBox ItemsSource="{Binding Tags}" VerticalAlignment="Top">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding}"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </StackPanel>
    </Grid>
</Window>

我将TextBlock绑定到属性TestList:

private List<string> _testList;

public List<string> TestList
{
    get
    {
        return new List<string>() { "Test1", "Test2", "Test3", "Test4", "Test5" };
    }
    set
    {
        _testList = value;
    }
}

和一个属性标签的ComboBox(看起来与TestList属性非常相似,但有不同的字符串)。

我的目标是以这样的形式显示:

Test1 [标签的组合框]

Test2 [标签的组合框]

Test3 [标签的组合框]

Test4 [标签的组合框]

Test5 [标签的组合框]

相反,我得到了:

Test1 [标签的组合框]

的Test2

Test3的

TEST4

TEST5

稍后,我还希望能够获取为每个TestList元素选择哪些选项的信息。

可能这很容易,但我刚开始学习WPF。

1 个答案:

答案 0 :(得分:1)

您是不是只是将ComboBox 移到 ItemsControl.ItemTemplate那么? (然后,您需要将TextBlockComboBox包装在另一个面板中(例如StackPanel)。)

如果所有ComboBoxes都应包含相同的项目,则需要更改绑定以访问外部DataContext

<ComboBox ItemsSource="{Binding DataContext.Tags,
                                RelativeSource={RelativeSource AncestorType=ItemsControl}}">