Подход MVVM — Просмотр меню с предварительным просмотром (общая модель просмотра)

#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

Какой самый простой и понятный подход для достижения этого?

  1. Я думал об использовании той же ViewModel с View A amp; B. Создайте свойство SelectedItem в ViewModel, а затем поместите его в ресурсы MainWindow и привяжите datacontext для просмотра A amp; B

    • Является ли это допустимым подходом? Будет ли эта виртуальная машина правильно обновлена в обоих представлениях, если она будет изменена?
  2. Каким-то образом привязать View к listbox SelectedItem для просмотра режима предварительного просмотра B, но не знаю как.

Комментарии:

1. MainWindowViewModel, который ссылается на все виртуальные машины, привязанные к верхнему уровню окна.

Ответ №1:

  1. Используйте только один ViewModel . Например; Псевдокод :

     public class ViewModel : INotifyPropertyChanged
    {
      public ObservableCollection<Employee>{get;}          
    
      /* provide change notification in ChosenItem */
      public Employee ChosenItem{get;set;}
    }
      
  2. Используйте это ViewModel as DataContext для обоих представлений.

Комментарии:

1. Спасибо за ответ, но я хотел получить более глубокое руководство по второй части: используйте эту ViewModel в качестве DataContext для обоих представлений.

2. @Chomik Вам нужен список для отображения в левом окне и выбранный элемент для отображения его предварительного просмотра в правом, и оба они присутствуют в ViewModel классе.

3. У меня уже есть этот список, но мне нужно чистое решение, как совместно использовать общую модель просмотра с двумя представлениями. Как я могу установить ту же ViewModel, что и DataContext, для этих представлений?

4. @Chomik Это не два представления, вы ошибочно принимаете их за два.

5. в любом случае, я думаю, что у меня получилось, я разделил MainWindow на два столбца и установил DataContext этой сетки в shared ViewModel, и это работает 🙂 Я надеюсь, что это хороший способ сделать это! Спасибо за помощь