【发布时间】:2016-09-07 21:18:46
【问题描述】:
我正在做一个小项目来学习学习 WPF MVVM。一切都很好,直到我遇到了这个障碍:我尝试将树视图绑定到可观察的集合以显示部门及其教师。数据被急切地加载,所以没有延迟加载。
这是我的视图模型:
public class NavigationTreeViewModel : BindableBase
{
private CV.Model.Context.CVContext _dbContext;
public NavigationTreeViewModel()
{
_dbContext = new Model.Context.CVContext();
LoadDepartments();
}
private void LoadDepartments()
{
var result = _dbContext.Departments.Include(a => a.Teachers);
_departments = new ObservableCollection<Department>(result.ToList());
}
private ObservableCollection<Teacher> _teachers;
public ObservableCollection<Teacher> Teachers
{
get { return _teachers; }
set { SetProperty(ref _teachers, value); }
}
private ObservableCollection<Department> _departments;
public ObservableCollection<Department> Departments
{
get { return _departments; }
set { SetProperty(ref _departments, value); }
}
}
我可以设置我的绑定来显示部门名称和教师,如下所示:
<UserControl x:Class="CV.Modules.Views.NavigationTreeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:CV.Modules.ViewModels"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<UserControl.DataContext>
<vm:NavigationTreeViewModel/>
</UserControl.DataContext>
<TreeView ItemsSource="{Binding Departments}" Margin="5">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Teachers}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</UserControl>
但是,如果我想在父实体中显示部门名称并在子实体中显示教师的姓氏,这将不起作用。所以我根据这个article把树视图的模板改成了控件的资源。这是我所做的:
<UserControl.Resources>
<DataTemplate x:Key="TeacherLevel">
<TextBlock Text="{Binding LastName}"/>
</DataTemplate>
<HierarchicalDataTemplate x:Key="DepartmentLevel"
ItemsSource="{Binding Departments}"
ItemTemplate="{StaticResource TeacherLevel}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</UserControl.Resources>
<TreeView ItemTemplate="{StaticResource DepartmentLevel}"
ItemsSource="{Binding Departments}"
Margin="5"/>
这种方式只显示部门名称,而不显示教师的姓氏。 我注意到在尝试访问我的实体的属性时没有 Intellisense 可用,我唯一可用的是我的 viewModel 中的属性。在我的第一次绑定尝试中,我可以看到所有部门属性,但在我的第二次绑定尝试中看不到。
我的问题是,如何将树视图绑定到在每个级别显示不同属性的多级实体图?
我在这里遗漏了一些非常基本的东西,但我无法找到它。任何帮助将不胜感激。
谢谢
【问题讨论】:
-
google 搜索 mvvm wpf treeview -> codeproject.com/Articles/26288/…(第一个结果)
标签: c# wpf entity-framework mvvm treeview