两个 CombBoxes 绑定到对象列表中的对象列表

Two CombBoxes binding to object list inside an object list

我有一个集合绑定到组合框(主组合框)的 Itemsource。这里面是另一个集合,它绑定到 ItemControl 中的另一个组合框,该组合框从不填充。请帮助

xaml

<ComboBox ItemsSource="{Binding NodeNames}" DisplayMemberPath="name" 
                                          SelectedValue="{Binding ConditionalNodeId, Mode=TwoWay}" SelectedValuePath="id">

</ComboBox>
  </WrapPanel>
    <ItemsControl ItemsSource="{Binding ConditionList}" AlternationCount="{Binding ConditionList.Count}">
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <WrapPanel>
            <ComboBox ItemsSource="{Binding NodeMembershipFunction}">

            </ComboBox>
          </WrapPanel>
        </DataTemplate>
      </ItemsControl.ItemTemplate>
    </ItemsControl>

Class代码

public class ConditionsVM : INotifyPropertyChanged
{
    public ObservableCollection<ConditionsRuleModel> _ConditionList { get; private set; }
    public List<MembershipFunction> _NodeMembershipFunction { get; private set; }        

    public ConditionsVM()
    {
        _ConditionList = new ObservableCollection<ConditionsRuleModel>();
        _NodeMembershipFunction = new List<MembershipFunction>();

        List<MembershipFunction> m = new List<MembershipFunction>();
        foreach (MembershipFunction mf in ConditionNode.membershipFunctions)
        {
           m.Add(mf);
        }
        NodeMembershipFunction = m;
    }

    public List<MembershipFunction> NodeMembershipFunction
    {
        get
        {
            return _NodeMembershipFunction;
        }
        set
        {
            if (_NodeMembershipFunction != value)
            {
                _NodeMembershipFunction = value;


            }
        }
    }

您似乎假设第二个组合框与第一个组合框具有相同的 DataContext。事实并非如此,第二个组合框的 DataContext 是 ConditionList 中的单个元素,即 ConditionRuleModel。

第二个组合框的一种解决方法:

    <ComboBox ItemsSource="{Binding DataContext.NodeMembershipFunction, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}, AncestorLevel=2}}"/>

我怀疑您需要将 AncestorLevel 设置为 2,因为 ComboBox 本身也是一个 ItemsCONtrol。不确定祖先查找是否从元素本身开始。