XAML 中用于 TextBlock 和 ComboBox 的数据模板

DataTemplate for TextBlock and ComboBox in XAML

我有这个 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 属性 几乎相同,但有不同的字符串)。

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

测试 1 [标签组合框]

Test2 [标签组合框]

Test3 [标签组合框]

Test4 [标签组合框]

Test5 [标签组合框]

相反,我得到:

测试 1 [标签组合框]

测试2

测试3

测试4

测试5

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

可能很简单,但我才刚刚开始学习 WPF。

你不应该把 ComboBox 移动到 ItemsControl.ItemTemplate 吗? (然后您需要将 TextBlockComboBox 包裹在另一个面板中(例如 StackPanel)。)

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

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