我有一个基于MVVM的Usercontrol。该模型有两个类,一个类具有另一个类的列表,如下面的模型所示。问题是我有两个为我的树视图定义两个不同的hierarchicaldatatemplate,它们也绑定到错误的模型。我想只做一个hierarchydatatemplate,它只知道我的viewmodel中的属性。最后,我想要的只是一个树视图:
| Familyname
|| PERSONNAME
|| PERSONNAME
代码非常大,所以我已经采取了一些措施。如果需要更多信息,请告诉我们:
模型
public class Family
{
private string m_Name;
public string NameOfFamily
{
get { return m_Name; }
set { m_Name= value; }
}
public ObservableCollection<Person> Persons{ get; set ; }
}
public class Person
{
private string m_Name;
public string NameOfPerson
{
get { return m_Name; }
set { m_Name= value; }
}
}
在视图模型中,我收到了与其各自人员的家人,例如
视图模型
Family Fam = GetFamilywithrespectivepersons;
查看
<TreeView Name="myTreeView" Grid.Column="0" Width="Auto" Height="300" ItemsSource="{Binding Fam}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type classes:Family}" ItemsSource="{Binding Persons}">
<TreeViewItem Header="{Binding NameOfFamily}"></TreeViewItem>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type classes:Person}">
<TreeViewItem Header="{Binding NameOfPerson}"></TreeViewItem>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
答案 0 :(得分:0)
每种类型定义DataTemplate
肯定没错。但由于Person
类没有子节点,因此DataTemplate
不必是分层的。
此外,模板不应包含任何TreeViewItem
元素:
<TreeView Name="myTreeView" Grid.Column="0" Width="Auto" Height="300" ItemsSource="{Binding Fam}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type classes:Family}" ItemsSource="{Binding Persons}">
<TextBlock Text="{Binding NameOfFamily}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type classes:Person}">
<TextBlock Text="{Binding NameOfPerson}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>