2010-11-12 16 views
4

Dans une application MVVM, je souhaite dynamiquement afficher des boutons pour les fonctions qui peuvent être modifiées pendant l'exécution. Techniquement, cela est pas si difficile, dans mon ViewModel j'ai ObservableCollection de RelayCommands:WPVM MVF: ItemTemplate pour lier une liste d'ICommands à un ListBox

public ObservableCollection<RelayCommand> CustomCommands {get;set;} 

Maintenant en XAML je peux lier une ListBox à cette collection:

<StackPanel Orientation="Horizontal"> 
    <ListBox ItemsSource="{Binding CustomCommands}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <wpfhlp:RelayButton DataContext="{Binding}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 
</StackPanel> 

À première vue On dirait que ça marche.
Mon problème est: l'ordre tabstop est cassé. Je veux que l'utilisateur puisse sauter d'un bouton à l'autre, mais à la place du bouton, la ListBox obtient le focus des utilisateurs, et je peux choisir entre les boutons en utilisant les touches fléchées au lieu de tabulation.

J'ai besoin de la capacité ListBox pour lier à une collection, mais je n'ai besoin d'aucune autre fonctionnalité de la listbox.
Y at-il un autre panneau au lieu de ListBox que je peux utiliser?
Ou est-ce que je peux désactiver les fonctions de ListBox d'une manière ou d'une autre afin qu'il montre juste les articles contenus sans pouvoir les sélectionner dans le ListBox?

Répondre

4

Essayez une ItemsControl de base au lieu d'un ListBox si vous n'avez pas besoin de la fonctionnalité ListBox:

<StackPanel Orientation="Horizontal"> 
    <ItemsControl ItemsSource="{Binding CustomCommands}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <wpfhlp:RelayButton DataContext="{Binding}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</StackPanel> 
+0

Ouais, cool, c'est exactement ce que je avais besoin !!! Merci! – Sam