2010-02-28 3 views
0

im en utilisant cet article http://blogs.msdn.com/delay/archive/2009/09/23/if-it-walks-like-a-duck-and-talks-like-a-duck-it-must-be-a-treegrid-a-simple-xaml-only-treegrid-ui-for-wpf.aspxWPF TreeView HierarchicalDataTemplate obtenir le contrôle des enfants

avoir des données hiérarchiques ... je rencontre TreeView qui contient la grille et que la grille contient ... textboxes

je veux juste cacher/affiche des colonnes à l'exécution de la grille dans treeview ... à n'importe quel niveau .. peu importe parent/enfant ...

Répondre

0

Une façon de faire est d'utiliser le concept ViewModel. Un ViewModel est une structure de données qui représente la vue de l'interface utilisateur de l'application, c'est le modèle (les données) + informations généralement nécessaires pour l'interface utilisateur. Dans votre exemple, vous pourriez avoir une nouvelle classe qui enveloppe vos données (accessible via une propriété appelée, disons, Model) et possède des propriétés supplémentaires, comme un IsVisible booléen. INotifyPropertyChanged doit être mis en œuvre par cette classe

Si je copier et modifier un modèle indiqué dans l'article mentionné:

<TreeView.ItemTemplate> 

     <!-- Level 0 template leaves space for 2 child "Toggle" levels --> 
     <HierarchicalDataTemplate ItemsSource="{Binding Model.SubItems}"> 
      <Grid Visibility={Binding IsVisible, Converter={StaticResource B2VConverter}}> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition SharedSizeGroup="Task"/> 
        <ColumnDefinition SharedSizeGroup="Toggle"/> 
        <ColumnDefinition SharedSizeGroup="Toggle"/> 
        <ColumnDefinition SharedSizeGroup="Duration"/> 
        <ColumnDefinition SharedSizeGroup="Notes"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="{Binding Model.Task}" Style="{StaticResource TextBlockStyle}"/> 
       <TextBlock Grid.Column="3" Text="{Binding Model.Duration}" Style="{StaticResource TextBlockStyle}"/> 
       <TextBlock Grid.Column="4" Text="{Binding Model.Notes}" Style="{StaticResource TextBlockStyle}"/> 
      </Grid> 
     ... 

Les choses nouvelles sont (je ne peux pas le texte en gras, j'ai ajouté) le paramètre de propriété IsVisible au niveau de la grille et les références de propriété de données où «Modèle». a été ajouté. Il est lié à la nouvelle propriété IsVisible par un convertisseur que vous devez déclarer au niveau des ressources:

Maintenant, vous modifiez votre ViewModel lorsque vous souhaitez masquer ou afficher un élément dans l'arborescence. Aussi simple que cela. Ceci est une introduction approximative au mode de programmation MVVM. Vous trouverez beaucoup de littérature à ce sujet. Il présente un certain nombre d'avantages, tels que la possibilité d'effectuer des tests unitaires de la logique d'interface utilisateur (c'est-à-dire dans quelles circonstances un élément d'arborescence devrait-il être visible?).

Une manière plus simple et moins modulaire de faire ce que vous demandez est d'ajouter la propriété IsVisible directement au modèle, mais cela est déconseillé car on mélange des pommes et des oranges. Cela peut convenir à un très petit programme qui est utilisé pendant quelques jours et ensuite jeté.