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).
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