Хорошо, вот ситуация.Net 4 WPF NO Silverlight.
У меня есть несколько представлений, которые представляют сетку данных, показывающую содержимое некоторых наблюдаемых коллекций, например
ObservableCollection<ClassAViewModel> sourceA;
ObservableCollection<ClassBViewModel> sourceB;
ObservableCollection<ClassCViewModel> sourceC;
Коллекции заполняются вызовом уровня доступа к данным.Я могу достаточно легко отобразить эти данные с помощью Usercontrol, который содержит сетку данных, привязанную к соответствующей коллекции.У меня есть
ClassAView
и ClassAViewModel
для управления отображением отдельных данных ClassA
, ClassBView
и ClassBViewModel
для управления отображением отдельных данных ClassB
ClassCView
и ClassCViewModel
для управления отображением одиночных ClassC
данных
У меня также есть:
Теперь скажите, что ClassA
содержит подмножество коллекции ClassB
и подмножество ClassC
коллекции и т. д.
В моем ресурсеФайл, который я связал вместе с ViewModels и их Views следующим образом (vm и vw - это пространства имен, в которых они находятся):
<DataTemplate DataType="x:Type vm:ClassAViewModel}">
<vw:ClassAView/>
</DataTemplate>
Теперь я хотел использовать AllClassBView
илиAllClassBViewModel
в пределах ClassAView
для отображения подмножества ClassB
экземпляров, которые относятся к нему.
Каков наилучший способ вызвать эти данные?
Можно ли повторно использовать AllClassBView
UserControl для отображения подмножества ClassB
ObservableCollection и каков наилучший способ сделать это?
Я не хочу размещать какие-либокод в файле ClassAView.cs только в файле ClassAView.xaml или ClassAViewModel .
Должен ли я просто добавить новое свойство в AllClassBViewи использовать это для фильтрации списка?Например, в ClassBViewModel, где я генерирую список ClassBViewModels (для использования в DataGrid), я могу использовать:
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);