我正在尝试将 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>
输出应如下所示:
如果将
ComboBox
放入 BranchModel
的模板中,则可以绑定到父级 UserLevelCategories
的父级的 DataContext
属性,如下所示:
<ComboBox ItemsSource="{Binding DataContext.UserLevelCategories,
RelativeSource={RelativeSource AncestorType=TreeViewItem, AncestorLevel=2}}" ... />
您不需要针对
UserLevelCategoryModel
类型的单独模板。