私は、小さなプロジェクトでWPF MVVMの学習方法を学んでいます。私がこの障害を打ち砕くまでは、すべてが大丈夫でした。観察可能なコレクションにツリービューをバインドして、部署とその教師を示すようにしました。データは熱心に読み込まれ、遅延読み込みは行われません。ここTreeViewをEFエンティティのグラフにバインドする
は、私の見解モデルである:私ならば、これは動作しません。しかし
<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>
:
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); }
}
}
私は、部門などのような教師の名前を表示するように設定を結合することができます親エンティティに部門名を表示し、子エンティティに教師の姓を表示します。ツリービューのテンプレートをこの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のプロパティです。私の最初の拘束力のある試みでは、私はすべての部署の特性を見ることができますが、私の2番目の拘束力のある試みではありません
私の質問これは、ツリービューを、各レベルで異なるプロパティを示す複数レベルのエンティティグラフにバインドするにはどうすればよいですか?
ここでは非常に基本的なものがありませんが、私はそれに私の指を置くことはできません。どんな助けでも大歓迎です。
ありがとうございます。
Google検索* mvvm wpf treeview * - > http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode(最初の結果) –