2013-09-11 6 views
0

Моя проблема в том, что я не знаю, как привязать CModul_I_O (Входы, выходы) из CModul. Я пробовал много способов с HierarchicalDataTemplate и datatemplates, но я всегда могу связать только один из этих 2 списков. Он также показывает только список первого CModul.TreeView WPF Binding Hierachical

я нужен TreeView, который выглядит как этот

-Modul1 
     -Inputs 
      input1 
      input2 
      input3 
     -outputs 
      output1 
      output2 
      output3 
    -Modul2 
     -Inputs 
      input1 
      input2 
      input3 
     -outputs 
      output1 
      output2 
      output3 

Мой класс 2 Данные

public class CModul 
{ 
    protected string sName, sKlasse; 
    protected List<CModul_I_O> lInputs,lOutputs; 

    public CModul() 
    { 
     sName = ""; 
     sKlasse = ""; 
     lInputs = new List<CModul_I_O>(); 
     lOutputs = new List<CModul_I_O>(); 
    } 

    public string Name 
    { 
     get { return sName; } 
     set { sName = value; } 
    } 
    ... 

    public List<CModul_I_O> Inputs 
    { 
     get { return lInputs; } 
     set { lInputs = value; } 
    } 
    public List<CModul_I_O> Outputs 
    { 
     get { return lOutputs; } 
     set { lOutputs = value; } 
    } 
} 

public class CModul_I_O 
{ 
    string sName, sVar, sKommentar; 

    public CModul_I_O() 
    { 
     sName=""; 
     sVar=""; 
     sKommentar=""; 
    } 

    public string Name 
    { 
     get { return sName; } 
     set { sName = value; } 
    } 
    .... 
} 

List<CModul> lModule = new List<CModul>(); 

XAML кода У меня есть

<Window.Resources> 
<DataTemplate x:Key="module" DataType="{x:Type local:CModul_I_O}"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="150"></ColumnDefinition> 
       <ColumnDefinition Width="150"></ColumnDefinition> 
       <ColumnDefinition Width="150"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <TextBox Grid.Column="0" Margin="5" Text="{Binding Path=Name}"></TextBox> 
      <TextBox Grid.Column="1" Margin="5" Text="{Binding Path=Kommentar}"></TextBox> 
      <TextBox Grid.Column="1" Margin="5" Text="{Binding Path=Var}"></TextBox> 
     </Grid> 
    </DataTemplate> 

</Window.Resources> 
<Grid> 
    <TreeView Name="TV_ModulListe" Grid.Row="0"> 
     <TreeView.Resources> 
      <HierarchicalDataTemplate DataType="{x:Type local:CModul}" ItemsSource="{Binding Inputs}" ItemTemplate="{StaticResource module}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="150"></ColumnDefinition> 
         <ColumnDefinition Width="150"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <TextBox Grid.Column="0" Margin="5" Text="{Binding Path=Name}"></TextBox> 
        <TextBox Grid.Column="1" Margin="5" Text="{Binding Path=Klasse}"></TextBox> 
       </Grid> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
    </TreeView> 
</Grid> 

ответ

0

Это показывает что-то вроде этого?

-Modul1 
    -Inputs 
     input1 
     input2 
     input3 
-Modul2 
    -Inputs 
     input1 
     input2 
     input3 

Вы должны иметь что-то вроде этого:

public CModul() 
{ 
    sName = ""; 
    sKlasse = ""; 

    categories = new List<CModul_Category>(); 
} 

public CModul_Category() 
{ 
    cName = ""; 

    ioList = new List<CModul_I_O>(); 
} 

Это должно быть что-то вроде этого:

<TreeView Grid.Column="0" ItemsSource="{Binding}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate 
      DataType="{x:Type local:CModul}" 
      ItemsSource="{Binding categories}" 
      > 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding sName, Mode=OneTime}" Margin="2,0"/> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate 
      DataType="{x:Type local:CModul_Category}" 
      ItemsSource="{Binding ioList"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding cName, Mode=OneTime}" Margin="2,0"/> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate 
      DataType="{x:Type local:CModul_I_O}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding sName, Mode=OneTime}" Margin="2,0"/> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
+0

TThanks для быстрого ответа. Я подумал об этом раньше, но все модули были сериализованы в базе данных. Я изменил его сейчас, и он работает. Но есть ли способ без изменения класса C#? –