WPF:如何将列表中的数据绑定到树视图节点内的组合框

问题描述 投票:0回答:1

我正在尝试将 UserLevelCategories 列表中的数据绑定到 Treeview 中的组合框。 **UserLevelCategories **列表位于另一个列表中 - systemBranches

型号:

public class SystemBranchViewModel
{
    public int LocalSystemId { get; set; }
    public string LocalSystemName { get; set; }
    public List<BranchModel> Branches { get; set; }
    public List<UserLevelCategoryModel> UserLevelCategories { get; set; }
}

背后代码:

List<SystemBranchViewModel> systemBranches = new List<SystemBranchViewModel>();
systemBranches = getDataService.GetSystemBranchesByUser();
Branch_List.ItemsSource = systemBranches;

XAML:

<TreeView Name="Branch_List">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type branch:SystemBranchViewModel}" ItemsSource="{Binding Branches}">
            <TextBlock Text="{Binding LocalSystemName}" />
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type branch:BranchModel}">
            <WrapPanel>
                <CheckBox IsChecked="{Binding IsBranchActiveToUser}" />
                <TextBlock Text="{Binding BranchName }" />
            </WrapPanel>
        </DataTemplate>
        <DataTemplate DataType="{x:Type branch:UserLevelCategoryModel}">
            <ComboBox ItemsSource="{Binding UserLevelCategories}"
                      DisplayMemberPath="{Binding UserLevelCategoryName}"
                      SelectedValuePath="{Binding UserLevelCategoryId}"/>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

输出应如下所示:

  1. 系统A
    • 分行名称1
    • 分行名称2
    • 权限:组合框 -用户级别类别名称 1 -用户级别类别名称 2
  2. 系统B
    • 分行名称1
    • 分行名称2
    • 权限:组合框 -用户级别类别名称 1 -用户级别类别名称 2
c# wpf xaml data-binding
1个回答
0
投票

如果将

ComboBox
放入
BranchModel
的模板中,则可以绑定到父级
UserLevelCategories
的父级的
DataContext
属性,如下所示:

<ComboBox ItemsSource="{Binding DataContext.UserLevelCategories, 
    RelativeSource={RelativeSource AncestorType=TreeViewItem, AncestorLevel=2}}" ... />

您不需要针对

UserLevelCategoryModel
类型的单独模板。

© www.soinside.com 2019 - 2024. All rights reserved.