【发布时间】:2012-01-12 13:32:48
【问题描述】:
我是 MVVM/WPF 新手,知道如何使用 Grid 和 StackPanel 布局控件。进行类似这样的布局的最佳方法是什么:
-------------------------
| Navigation |
-------------------------
| | |
| Summary | Details |
| | |
-------------------------
| Extra Data |
-------------------------
一旦我有了布局,如何将正确的视图放入正确的单元格中。每个不同的区域(导航、摘要等)都有自己的 View/ViewModel。
我想到了几种不同的方法,但不确定哪种(如果有的话)最好。
方法一 像这样的嵌入式网格
<Grid>
<Row> (Navigation)
<Row>
<Grid>
<Column> (Summary)
<Column> (Detail)
</Grid>
<Row> (Extra)
</Grid>
需要跨越列,我不确定这是否是好的做法。
方法二嵌入视图
<Grid>
<Row> (Navigation)
<Row> (Summary/Details defined by a another view containing 2 columns)
<Row> (Extra)
</Grid>
对于方法 2,也可以使用 StackPanel 代替 Grid
使用任何一种方法(或其他方法)我如何指定哪个单元格获得什么视图?例如,我在 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 在正确的单元格中指定正确的视图。
【问题讨论】:
标签: wpf mvvm dependency-injection grid itemssource