2012-03-08 2 views
0

У меня есть TreeView с ItemsSource, являющийся узлами разных типов.TreeView с AddIn

class Node 
class Folder : Node 
class Project : Folder 

Все 3 класса определены в основном проекте. И используемый мной xaml выглядит так:

<TreeView Name="ProjectTreeView" SelectedItemChanged="ProjectTreeView_SelectedItemChanged"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type prj:Project}" ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Path=Name}" /> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type prj:Folder}" ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Path=Name}" /> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type prj:Node}"> 
      <TextBlock Text="{Binding Path=Name}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 

Что я хочу сделать, это иметь надстройку. В разных сборках я хочу определить типы, которые наследуют Node или в некоторых случаях Folder. И я хочу, чтобы эти новые типы имели свой собственный макет в TreeView. Некоторые из них могут иметь несколько флажков или индикатор выполнения. Xaml для этих новых типов должен быть частью сборок, где определены типы.

Как я могу во время выполнения сообщить TreeView, какой шаблон использовать для этих новых типов узлов?

+0

В чем вопрос? –

+0

Oups ... исправлено! – Aleks

+0

Итак, новые типы узлов будут в разных сборках. Можете ли вы обновить вопрос, чтобы указать, будете ли вы определять шаблоны в каждой сборке узла или в текущей сборке? –

ответ

0

В каждой надстройке, когда вы определяете каждый DataTemplate, обязательно укажите DataType.

В вашем основном приложении, когда вы импортируете надстройки, вам нужно сделать Application.Current.Resources.Add шаблонов из ваших надстроек. Затем, когда WPF видит тип, он автоматически «раздувается», используя заданный DataTemplate.