Я пытаюсь создать приложение 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 значение выделенных пользовательских элементов управления ..)