获取在数据绑定对象的“父母”?(Getting at the “parent” of a datab

2019-10-17 03:40发布

我有一个字符串的两个数组的对象。 对象是绑定到列表框数据。 一个列表绑定为列表的的ItemsSource。 另外,它的东西害我麻烦,需要绑定到一个组合框就是这样被设置到列表的ItemTemplate一个DataTemplate的一部分。 基本上在列表框的每个项具有所述第一列表的相应元素和包含在第二列表的组合框。 换句话说,列表中的每个项目有选择相同组合框。

问题来自于它卷起的DataTemplate中的数据绑定的第一个列表的事实。 我期待的DataTemplate将数据绑定到包含两个列表的对象。 现在,这种情况发生,我无法弄清楚什么样的结合语法我需要在DataContext的的“父母”,如果这甚至有可能。

有人能指出我朝着正确的方向吗?

谢谢!

Answer 1:

如果我理解正确,你可以在你的ListBox的DataContext的设置为一个类的实例(在我的例子,我做它的代码是:list.DataContext = MyClass的),你要设置你的ListBox的的ItemSource在类(即项目)的列表,你的组合框在类(即价值),另一个列表中的ItemsSource。 这里是我的XAML,似乎工作:

<ListBox Name="list" ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding}"/>
                <ComboBox ItemsSource=
                          "{Binding RelativeSource={RelativeSource FindAncestor, 
                                                    AncestorType={x:Type ListBox}}, 
                                    Path=DataContext.Values}"
                />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

和继承人是我绑定到类:

public class AClass
{

    protected List<string> _Items;
    public List<string> Items
    {
        get
        {
            if (_Items == null)
            {
                _Items = new List<string>();
            }
            return _Items;
        }
    }


    protected List<string> _Values;
    public List<string> Values
    {
        get
        {
            if (_Values == null)
            {
                _Values = new List<string>();
            }
            return _Values;
        }
    }
}

在代码中,我创建ACLASS的实例,添加项目和值,和实例设置列表框的DataContext的。



Answer 2:

我不认为你想做什么,你正在尝试做的。 你问的痛苦。

什么你可能想要做的,而不是为参考您的收藏中包含了您的组合框子集合每个项目内的静态集合。 所以:

//Pseudocode
TopLevelEntity
{
     SubLevelEntity[] SubItemsForComboBox;
}

这样,每个“TopLevelEntity”你会跟你的项目组合框的收集准备。

<ListView ItemsSource="{StaticResource MyCollectionOfTopLevelEntities}">
    <ItemTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding SubItemsForComboBox} />
        </DataTemplate>
    </ItemTemplate>
</ListView>

正如我的路,我还没有证实此代码,这是可能的,它甚至不进行编译,但理论上应该是合理的。

让我们知道你决定做什么。



Answer 3:

首先,正如安德森指出,我建议你重新设计你的类从某些地方获得的静态引用列表之外的组合框的项目,但这里是你的当前情况下一种解决方法。 我假设你感兴趣的(“父”)的主要对象是ListBox的DataContext的。 你想在里面DataTemplateLevel引用。 想法是步行到ListBox和获得的DataContext

 <Combobox DataContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" ItemsSource="{Binding YourCollection}" ....


文章来源: Getting at the “parent” of a databound object?