2010-11-16 11 views
1

J'ai un contrôle onglet où chaque TabItem est un UserControl. Je voudrais conserver les UserControls dans ItemsSource du TabControl. Est-ce que la liste ItemsSource va dans le ViewModel de Windows? Si c'est le cas, j'ai l'impression que cela brise MVVM puisque le ViewModel aurait maintenant des contrôles GUI à l'intérieur. Ou dois-je mettre cette liste dans le codebehind de la fenêtre qui contient le contrôle de tabulation?Où dois-je mettre la liste des UserControls et ne pas rompre MVVM?

Toutes les suggestions seraient super!

Répondre

0

Voici ce que j'ai fait. J'ai créé une interface implémentée par tous mes contrôles, IMyAppControl, qui contient des informations telles que le titre, la description et d'autres métadonnées.

Ma fenêtre principale comporte une ObservableCollection à laquelle l'onglet ItemsSource se lie.

0

Avec les contrôles de tabulation, le plus souvent les différents onglets sont créés statiquement en XAML plutôt que lors de l'exécution par liaison de données. Cependant, il n'y a aucune raison de ne pas le faire. Si vous avez une collection de vues, elles doivent absolument être stockées dans une vue. N'oubliez pas que vous pouvez également lier ItemsSource à une liste d'objets ViewModels et que WPF génère une vue pour vous avec ItemTemplate, avec l'objet ViewModel défini en tant que DataContext. Cette collection de ViewModels doit être stockée dans un modèle de vue, bien qu'à un moment donné, un modèle de vue doive évidemment être stocké dans une vue.

0

Cela peut très probablement être fait de plusieurs façons, tout cela étant sujet à débat sur la façon dont ils sont "MVVM-friendly".

Ma configuration est la suivante.

Ma fenêtre principale a un DataContext lié à un MainWindowViewModel qui contient une propriété

public ObservableCollection<Workspace> WorkspaceCollection{get;set;} 

MainWindow a une TabControl qui ItemsSource est lié à WorkspaceCollection

Espace de travail sont tous viewmodels et sont liés à différentes vues/usercontrols via DataTemplates

0

Vous pouvez jeter un oeil à la Écrire exemple d'application du WPF Application Framework (WAF). Il a un TabControl où chaque TabItem est un UserControl et il le fait en appliquant le modèle MVVM.