2016-07-24 7 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; 
} 

Как бы я написать DataTemplate для Manager в то время как ссылки на 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, как это.

В качестве альтернативы вы можете ссылаться на определение EmployeeTemplate внутри ManagerTemplate путем используя ContentControl:

<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

Смежные вопросы