WPVM MVF: liaison d'un ViewModel différent à chaque TabItem?
J'ai une fenêtre principale avec un contrôle onglet contenant 2 tabItem
s:
J'ai actuellement 1 ViewModel
services Tab1 & Tab2. Cette ViewModel
est en train de devenir un peu gonflé avec floue SOC. Je veux diviser la logique en 2 viewmodel: ViewModel 1 & ViewModel2. Ma compréhension est que vous pouvez définir la Fenêtre Principale DataContext
à une Base ViewModel qui détient une collection de ViewModels & ensuite, vous pouvez faire valoir chaque TabItem à un autre ViewModel.
L'exemple que j'ai vu de ces Viewmodel exposer une ObservableCOllection comme suit:
private ObservableCollection<ViewModel1> _viewModelCollection
Public Observable Collection<ViewModel1> ViewModelCollection
{
get { return _viewModelCollection; }
set
{
_viewModelCollection = value;
OnPropertyChanged("ViewModelCollection");
}
}
public BaseViewModel()
{
ViewModelCollection = new ObservableCollection<ViewModel1>();
ViewModelCollection.Add(new ViewModel1(Tab1);
ViewModelCollection.Add(new ViewModel1(Tab2);
}
Mais comment puis-je attribuer une autre ViewModel pour chaque TabItem? Je voudrais Tab1= ViewModel1 & Tab2=ViewModel2?
source d'informationauteur Hardgraf
Vous devez vous connecter pour publier un commentaire.
Vous pouvez en effet ajouter le point de vue des modèles pour vos onglets pour principal modèle de vue. Vous pouvez ensuite lier à l'enfant les modèles de vue dans le XAML de vos onglets.
Dire que vous avez trois viewmodel:
MainViewModel
Tab1ViewModel
etTab2ViewModel
. Sur votreMainViewModel
vous gardez une collection de votre onglet viewmodel:Après le réglage de la
DataContext
de votre fenêtre principale de votreMainViewModel
vous pouvez lier leDataContext
de vos onglets par la référence à laChildren
propriété:- Je utiliser un framework comme Prism, qui permet de définir des régions et de l'utilisation de la
RegionManager
. Vous pouvez ensuite définir uneContentControl
comme le " ui " pour leTabItem
Ensuite, vous pouvez utiliser le
RegionManager.RequestNavigate
pour remplir une région nommée avec un point de vue particulier (et de notre point de vue de l'importation d'un viewmodel et de définir leurs datacontext).Maintenant dans le code XAML lient les Enfants à ItemsSource. Il va générer chaque Onglet pour chaque viewmodel, nous avons ajouté dans la collection observable