我有一个带有视图模型的页面。我正在尝试将模板框的绑定源从模板化DataGrid列设置为视图模型。它给了我一个空的引用错误。
这是我的XAML:
<navigation:Page.Resources>
<vm:SiteViewModel x:Key="viewModel" />
</navigation:Page.Resources>
<navigation:Page.DataContext>
<Binding Source="{StaticResource viewModel}" />
</navigation:Page.DataContext>
...
<data:DataGrid ItemsSource="{Binding CurrentSite.Contacts}">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="Role">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=Roles, Source=????}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=RoleName}" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
答案 0 :(得分:0)
首先,您可以将xaml简化为:
<navigation:Page.DataContex>
<vm:SiteViewModel />
</navigation:Page.DataContext>
另一个问题是,一旦你进入具有不同datacontext的数据网格,你就无法再回到页面datacontext。为了解决这个问题,我建议使用Dan Wahlin's DataContextProxy control,这样可以轻松退出。使用它你会添加:
<navigation:Page.DataContex>
<vm:SiteViewModel />
</navigation:Page.DataContext>
<navigation:Page.Resources>
<controls:DataContextProxy x:Key="DataContextProxy" />
</navigation:Page.Resources>
...
<data:DataGrid ItemsSource="{Binding CurrentSite.Contacts}">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="Role">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource DataContextProxy},Path=DataSource.Roles}">
...
</ComboBox>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>