【问题标题】:DataTemplate for TextBlock and ComboBox in XAMLXAML 中 TextBlock 和 ComboBox 的 DataTemplate
【发布时间】:2016-08-23 13:28:52
【问题描述】:

我有这个 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 [标签组合框]

测试2

测试3

测试4

测试5

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

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

【问题讨论】:

    标签: wpf xaml combobox datatemplate


    【解决方案1】:

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

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

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

    【讨论】:

    • 有效!但我不太明白 .
    • 另一件事:我需要做什么才能阅读用户在每个 ComboBox 中选择的内容?
    • 阅读Binding class 及其属性/相关类的文档,这非常重要。还有this overview。在这里,您将绑定源更改为文档元素,因为当前的DataContext(即隐式源)已更改为当前的模板项。因为源现在是一个元素,您需要在绑定路径中专门获取DataContext
    • 只需将SelectedItem 绑定到数据对象的属性。 (将其从字符串列表改为对象列表,包含Label属性和Value属性,将标签绑定到文本块,将值绑定到组合框选定项)
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 2014-05-08
    • 2012-02-01
    • 2018-08-03
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多