#wpf #mvvm #listbox #viewmodel #datacontext
#wpf #mvvm #список #viewmodel #datacontext
Вопрос:
Я только начал свой путь с MVVM и WPF, и мне нужен совет, чтобы решить мою проблему или, скорее, направить меня к правильному решению.
Ссылка на изображение:https://s12.postimg.org/md0h6fv3x/Simple_App.png
Описание (чего я хочу достичь):
-
Вид A представляет собой меню (UserControl) со списком и DataContext: V.ObservableCollection
-
Вид B — это предварительный просмотр выбранного элемента из окна просмотра списка
-
Просмотр A и B загружается из MainWindow
Какой самый простой и понятный подход для достижения этого?
-
Я думал об использовании той же ViewModel с View A amp; B. Создайте свойство SelectedItem в ViewModel, а затем поместите его в ресурсы MainWindow и привяжите datacontext для просмотра A amp; B
- Является ли это допустимым подходом? Будет ли эта виртуальная машина правильно обновлена в обоих представлениях, если она будет изменена?
-
Каким-то образом привязать View к listbox SelectedItem для просмотра режима предварительного просмотра B, но не знаю как.
Комментарии:
1. MainWindowViewModel, который ссылается на все виртуальные машины, привязанные к верхнему уровню окна.
Ответ №1:
-
Используйте только один
ViewModel
. Например; Псевдокод :public class ViewModel : INotifyPropertyChanged { public ObservableCollection<Employee>{get;} /* provide change notification in ChosenItem */ public Employee ChosenItem{get;set;} }
-
Используйте это
ViewModel as DataContext
для обоих представлений.
Комментарии:
1. Спасибо за ответ, но я хотел получить более глубокое руководство по второй части: используйте эту ViewModel в качестве DataContext для обоих представлений.
2. @Chomik Вам нужен список для отображения в левом окне и выбранный элемент для отображения его предварительного просмотра в правом, и оба они присутствуют в
ViewModel
классе.3. У меня уже есть этот список, но мне нужно чистое решение, как совместно использовать общую модель просмотра с двумя представлениями. Как я могу установить ту же ViewModel, что и DataContext, для этих представлений?
4. @Chomik Это не два представления, вы ошибочно принимаете их за два.
5. в любом случае, я думаю, что у меня получилось, я разделил MainWindow на два столбца и установил DataContext этой сетки в shared ViewModel, и это работает 🙂 Я надеюсь, что это хороший способ сделать это! Спасибо за помощь