Я новичок в MVVM / WPF и знаю, как использовать элементы управления макетом Grid и StackPanel. Каков наилучший способ сделать макет, похожий на этот:
-------------------------
| Navigation |
-------------------------
| | |
| Summary | Details |
| | |
-------------------------
| Extra Data |
-------------------------
Как только у меня есть макет, как мне получить правильные представления в правильные ячейки. Каждая отдельная область («Навигация», «Сводка» и т. Д.) Будет иметь свою собственную View / ViewModel.
Я думал о паре разных методов, но не уверен, какие (если таковые имеются) лучше.
Метод 1
Встроенная сетка вроде такой
<Grid>
<Row> (Navigation)
<Row>
<Grid>
<Column> (Summary)
<Column> (Detail)
</Grid>
<Row> (Extra)
</Grid>
Требуются охватывающие столбцы, в которых я не уверен, является ли это хорошей практикой или нет.
Метод 2 Встроенный просмотр
<Grid>
<Row> (Navigation)
<Row> (Summary/Details defined by a another view containing 2 columns)
<Row> (Extra)
</Grid>
Может также использовать StackPanel вместо Grid для метода 2
С помощью любого метода (или чего-то еще) как мне указать, какая ячейка получает какое представление? Например, у меня есть следующее в MainWindowViewModel:
public MainWindowViewModel()
{
NavigationViewModel navigationViewModel = new NavigationViewModel();
this.ViewModels.Add(navigationViewModel);
SummaryViewModel summaryViewModel = new SummaryViewModel ();
this.ViewModels.Add(summaryViewModel);
DetailViewModel detailViewModel= new DetailViewModel();
this.ViewModels.Add(detailViewModel);
ExtraDataViewModel extraDataViewModel = new ExtraDataViewModel ();
this.ViewModels.Add(extraDataViewModel);
}
private ObservableCollection<ViewModelBase> _viewModels;
public ObservableCollection<ViewModelBase> ViewModels
{
get
{
if (_viewModels == null)
{
_viewModels = new ObservableCollection<ViewModelBase>();
}
return _viewModels;
}
}
И в MainWindowView у меня есть это:
<Window.Resources>
<ResourceDictionary Source="MainWindowResources.xaml" />
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<ItemsControl ItemsSource="{Binding ViewModels}" Margin="3" />
</Grid>
Просто не уверен, как подключиться к ItemsSource, чтобы указать правильный вид в правильной ячейке.