Bon, voici la situation. Net 4 WPF NO Silverlight.MVVM et DataGrid View réutilisation en tant que contrôles intégrés dans d'autres vues avec des données de sous-ensembles
J'ai plusieurs vues qui présentent une grille de données montrant le contenu de certaines collections observables, par ex.
ObservableCollection<ClassAViewModel> sourceA;
ObservableCollection<ClassBViewModel> sourceB;
ObservableCollection<ClassCViewModel> sourceC;
Les collections sont remplies par un appel à la couche d'accès aux données. Je peux afficher ces données assez facilement avec un Usercontrol qui contient une grille de données liée à la collection appropriée. je
ClassAView
etClassAViewModel
à affichage commande de simplesClassA
données,ClassBView
etClassBViewModel
à affichage commande de simplesClassB
donnéesClassCView
etClassCViewModel
à écran de contrôle de simpleClassC
données
J'ai aussi:
AllClassAView
etAllClassAViewModel
pour afficher une grille de données avec les données relatives à toutes les instancesClassA
.AllClassBView
etAllClassBViewModel
pour afficher une grille de données avec les données relatives à toutes les instancesClassB
.etc.
disent maintenant que ClassA
contient un sous-ensemble de la collection ClassB
et un sous-ensemble de la collection ClassC
etc.
Dans mon fichier de ressources que je les ai châtiés ViewModels et leurs vues ensemble de la manière suivante (vm et vw sont les espaces de noms où ils se trouvent):
<DataTemplate DataType="x:Type vm:ClassAViewModel}">
<vw:ClassAView/>
</DataTemplate>
Maintenant w Je souhaitais faire était d'utiliser un AllClassBView
ou AllClassBViewModel
dans le ClassAView
pour afficher le sous-ensemble de ClassB
instances qui se rapportent à elle.
Quelle est la meilleure façon d'appeler ces données? Puis-je réutiliser le UserControl AllClassBView
pour afficher un sous-ensemble du ClassB
ObservableCollection et quelle est la meilleure façon de procéder?
Je ne veux pas placer un code dans le fichier ClassAView.cs que dans le ClassAView.xaml ou ClassAViewModel.
Dois-je simplement ajouter une nouvelle propriété à AllClassBView et l'utiliser pour filtrer la liste?Par exemple dans les ClassBViewModel où je produis la liste des ClassBViewModels (pour une utilisation dans le DataGrid) Je peux utiliser:
if(this.ClassA_Id!=0)
{
List<ClassBViewModel> all = (from ClassB in this.DataRepository.GetClassBs().Where(x=>x.ClassA_Id == this.ClassA_Id) select new ClassBViewModel()).ToList();
}
else
{
List<ClassBViewModel> all = (from ClassB in this.DataRepository.GetClassBs() select new ClassBViewModel()).ToList();
}
this.sourceB= new ObservableCollection<ClassBViewModel>(all);