2016-07-24 102 views
0

假设我有:如何内嵌嵌套属性的DataTemplate?

class Employee 
{ 
    public string Name; 
    public string Id; 
    // ... 
} 

<DataTemplate DataType="local:Employee"> ... </DataTemplate> 

和:

class Manager 
{ 
    public string Salary; 
    public int Rank; 
    public Employee DirectReport; 
} 

我怎么会写DataTemplateManager虽然提到EmployeeDataTemplate

即:

<DataTemplate DataType="local:Manager"> 
    <TextBlock Text={Binding Salary}/> 
    <TextBlock Text={Binding Rank}/> 
    // How do I display the DirectReport here using Employee's DataTemplate? 

</DataTemplate> 

回答

1

你用简单的OO inhertance而不是什么花招与WPF实现这一目标。

一个Manager仍然是一个Employee,所以改变了你这样的类:

public class Employee 
{ 
    public string Name; 
    public string Id; 
    public string Salary; 
    Employee DirectReport; 
    // ... 
} 

public class Manager : Employee 
{ 
    public int Rank; 
} 

然后你就可以离开你的WPF DataTemplate的,因为它是。

另外,您可以通过使用ContentControl从ManagerTemplate内引用EmployeeTemplate定义:

<DataTemplate DataType="local:Manager"> 
    <TextBlock Text={Binding Salary}/> 
    <TextBlock Text={Binding Rank}/> 

    <ContentControl ContentTemplate="{StaticResource EmployeeTemplate}" /> 
</DataTemplate> 

其他有用的参考资料包括:

+0

谢谢,但在我的sc enario继承不太合适。我正在努力的是显示复合对象,其中包含复合对象的属性。我不希望写一个巨大的DataTemplate,而是希望能写出多个小数据并引用它们。 – Shmoopy

+0

@Shmoopy我已经更新了我的答案。 – slugster