2010-12-08 17 views
2

J'ai une source de données:WPF: Reliure TreeView

private List<PlayData> _treeData = new List<PlayData>(); 

    private void Test() 
    { 
     _treeData.Add(new PlayData() 
     { 
      BoolList = new List<bool>() { true, false, true }, 
      Name = "A" 
     }); 

     _treeData.Add(new PlayData() 
     { 
      BoolList = new List<bool>() { true, false, true }, 
      Name = "B" 
     }); 

     DataContext = this; 
    } 

Comment puis-je lier cela à XAML pour que Nom est le parent et la liste des enfants sont les de Bool. Je tryed unsuccesfully avec ceci:

<TreeView x:Name="treeView" Height="200" ItemsSource="{Binding Path=TreeData}" > 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Path=BoolList, Mode=TwoWay}" > 
       <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=TwoWay}" /> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
+1

Que voulez-vous dire par "sans succès"? –

Répondre

0

On ne sait pas à partir de votre échantillon ce que vous faites - mais en substance

  1. Vous devez avoir une propriété publique définie dans le code appelé TreeData (absent de votre échantillon, mais en supposant que cela est celui qui retours _ treeData)
  2. BoolList doit être une propriété enfant de TreeData (qui semble être le cas)
  3. Vous devez définir un HierarchicalTemplate pour chaque élément dans votre arborescence qui contient des éléments enfants.
  4. Définir un DataTemplate régulier pour chaque élément dans votre arborescence qui ne contient pas d'éléments de l'enfant

S'il existe différents types de données comme dans votre cas, vous devez déclarer le type de l'objet comme dans

<HierarchicalDataTemplate DataType="{x:Type foo:PlayData}" 
    ItemsSource="{Binding BoolList}"> 

L'ordre des modèles est important s'il peut y avoir plusieurs correspondances.

0

Le champ _treeData doit être exposé comme propriété afin d'être lié. Il n'est pas clair à partir de votre exemple de code si vous le faites ou non.

Vous pouvez également vous débarrasser de Mode = TwoWay sur vos deux liaisons car il n'y a pas d'entrée pour repousser les valeurs source.