2010-12-15 64 views
1

Je prévois une application WPF qui va construire une grille dynamique avec des blocs de texte dans le viewmodel, puis rafraîchir l'interface (xaml) avec la nouvelle grille.comment construire la grille dynamique et la liaison à xaml en utilisant mvvm

J'ai fait le premier pas, mais j'ai des problèmes pour actualiser la vue avec la nouvelle grille.

Existe-t-il un exemple de code pour lier la grille au xaml que je peux voir? Je ne peux vraiment pas comprendre ça!

Merci

Répondre

1

Vous pouvez approcherez ce peu à tort, difficile à dire de la question-

En général, pour montrer un ensemble dynamique d'éléments de l'interface utilisateur dans MVVM vous liez la propriété ItemsSource d'un ItemsControl à un ObservableCollection . La propriété ItemsControl ItemsTemplate convertit l'objet YourViewModel en un UIElement qui peut être un TextBlock ou un style quelconque.

Ainsi, à titre d'exemple:

// model 
class Person 
{ 
    public string Name {get; private set;} 
} 

// view model 
class MainViewModel 
{ 
    public ObservableCollection<Person> People {get; private set;} 
} 

//view 
<UserControl DataContext="{Binding MyMainViewModelObject}"> 
    <ItemsControl ItemsSource="{Binding People}"> 
    <ItemsControl.ItemsTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding Name}"/> 
     </DataTemplate>/ 
    </ItemsControl.ItemsTemplate> 
    </ItemsControl> 
</UserControl> 

Je nai que le code testé, il est juste pour illustrer. Il existe d'autres façons de disséquer le problème dans MVVM, tout dépend de la situation. Vous devrez nous donner plus de détails pour vous aider avec cela. Rarement dans WPF, il est nécessaire d'utiliser du code pour créer ou ajouter des éléments d'interface utilisateur à d'autres UIElements, etc.

Un point à noter plus en suivant les lignes exactes de la question est qu'un ItemsControl peut soit se lier à un tas de réguliers objets et utiliser son modèle pour créer des UIElements à partir d'eux, OU il peut se lier à une liste d'UIElements, auquel cas le modèle n'est pas appliqué (cela ressemble à la situation que vous avez).

+0

Merci Guy. Le problème est compliqué à expliquer. J'ai besoin de créer une grille dinamiquement parce que je ne connais pas le nombre de lignes/colonnes et également personnaliser les cellules avec des couleurs et des menus contextuels dans certains cas. Toute cette procédure de création de la grille, je fais dans viewmodel. La seule chose dont j'ai besoin est de rafraîchir la vue avec la grille créée dans le viewmodel. – Guillermo