У меня следующая ситуация:MVVM Master Detail с WPF TreeView
Просмотров:
- EbayCategoriesView (с TreeView)
- MaintainEbayCategoryView (с полями категории детализации)
ViewModels:
- EbayAllCategoriesViewModel (с ObservableCollection EbayCategoryViewModel под названием EbayCategories).
- EbayCategoryViewModel (с Категория Properties)
EbayCategoryViewModel имеет общественную собственность, то есть список, который называется ChildrenCategories. TreeView привязан к ObservableCollection, и каждый узел TreeView представляет собой HyperLink. Я бы хотел, чтобы при нажатии на гиперссылку система открыла MaintainEbayCategoryView и загрузила ее данными EbayCategoryViewModel.
Я использую шаблон MVVM; EbayCategoryViewModel принимает входной параметр ICommand в конструкторе. Когда я заселить ObservableCollection в EbayAllCategoriesViewModel, я создаю новый RelayCommand для каждого элемента коллекции и передать функцию, которая должна быть выполнена:
hierarchyList.Add(new EbayCategoryViewModel(
item.EbayCategoryName,
item.EbayCategoryID,
FillRecursive(flatList, item.EbayCategoryID, item.EbayCategoryName),
parentCategoryName,
item.EbayOrder,
new RelayCommand(cmd => this.LoadCategoryDetails())
));
Моя проблема сейчас является то, что в LoadCategoryDetails() метод в EbayAllCategoriesViewModel У меня нет ссылки на узел дерева EbayCategoryViewModel, который был нажат (SelectedItem в TreeView не является общедоступным, а также я не уверен, что он содержит щелчок элемента ...).
Даже если я нашел обходное решение, я хотел бы понять, что является правильным подходом к решению моей проблемы, учитывая шаблон MVVM. Поскольку у меня уже есть все поля категорий в EbayCategoryViewModel, я мог бы получить доступ к текущему объекту EbayCategoryViewModel, который был бы нажат, не получив снова доступ к моему источнику данных.
Заранее благодарим за любые предложения.
Спасибо Nitin, это выглядит более элегантным решением, оно отлично работает. – Alessandro