Соедините несколько пользовательских элементов управления с отдельными моделями представления в MainWindow - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать приложение WPF MVVM для редактирования музыкальных c альбомов (контрольных листов) с отображением формы сигнала. Главное окно должно иметь следующий дизайн:

  • В верхней части главного окна будет строка меню.
  • Под отображением формы звукового сигнала
  • Под отображением звуковых дорожек альбома.

Чтобы сделать MainWindow.xaml не таким большим и иметь какое-то функциональное разделение, я решил создать отдельные модели представления и представления для отображения формы волны и альбома / отображение треков. Каждое отдельное представление, которое я создал как пользовательские элементы управления WPF.

В app.xaml представления и модели представлений связаны друг с другом:

  <Application.Resources>
    <DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
      <Views:Main/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type ViewModels:CueAlbumViewModel}">
      <Views:CueAlbum/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type ViewModels:WaveFormViewModel}">
      <Views:Waveform/>
    </DataTemplate>
  </Application.Resources>

MainWindow установило MainViewModel как DataContext:

  <Window.DataContext>
    <ViewModels:MainViewModel/>
  </Window.DataContext>

Привязки MainWindow <-> MainViewModel работают до сих пор.

Но не работает привязка UserControls к их пользовательским источникам данных в MainWindow. Например, для представления CueAlbum я пробовал это так:

      <Views:CueAlbum Grid.Row="1"
                      DataContext="{Binding CueAlbumViewModel}"/>

Но соединение не установлено должным образом. Конструктор CueAlbumViewModel вообще не вызывается.

Итак, можно ли этого достичь должным образом в WPF / MVVM без кода в представлении кода?

Или используются пользовательские элементы управления с собственными DataContexts в MainWindow вообще плохой дизайн?

(Еще один вопрос, который может возникнуть после того, как это решится, заключается в том, как установить для кнопок основной панели инструментов Windows значение выделенных пользовательских элементов управления ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...