2013-08-16 2 views
0

Je veux créer un ListBox et le remplir avec UIElement anonyme. En d'autres termes, le DataTemplate du ItemTemplate ne contiendra qu'un seul élément, et afterwords pendant l'exécution, après je vais créer dans le code derrière UIElement s (TextBlock s, Grid s ...) et remplir la liste avec lui. Comment puis-je écrire le DataTemplate du ListBox? Et comment ai-je l'intention d'utiliser un ObservableCollection pour le ItemSource? Donc, devrait utiliser un ObsevableCollection de UIElement?ListBox de UIElements anonyme

+0

Nous vous recommandons de ne pas avoir de listes contenant des éléments d'interface utilisateur. Introduire un modèle-vue-séparation, par ex. MVVM. –

Répondre

2

Première question: NoDataTemplate. Puisque vos articles sont déjà UIElement, vous n'avez pas besoin de DataTemplate.

Et si vous créez une collection modifiable, alors oui, ObservableCollection<UIElement> est le chemin à parcourir.

Maintenant, pourquoi feriez-vous cela? Vous voudrez peut-être vous demander si c'est la meilleure façon de faire les choses. Pourquoi vos données et votre présentation ne sont-elles pas séparées? Si vous avez besoin de plus d'un type d'élément dans la liste, DataTemplateSelector vous permettra-t-il d'avoir un vrai ViewModel?

+0

Ce que je veux exactement, c'est une liste de TextBlocks et de Grids contenant des TextBlocks. Je veux utiliser alors de sorte que l'utilisateur marquera et éditera chaque bloc de texte individuellement, et je avant tout cela remplir la liste basée sur le choix de l'utilisateur quand la grille vient en premier ou le TextBlock. –

+0

D'accord, il semble donc que vous devriez utiliser un 'DataTemplateSelector'. Vous assing le 'ItemTemplateSelector' sur le' ListBox'. –

0
<ListBox x:Name="name" ItemsSource="{Binding source}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <textbox x:Name="name"></ToggleButton> //or any tool 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
Questions connexes