我问这个问题,因为我无法让它发挥作用。
<UserControl.Resources>
<ObjectDataProvider x:Key="vmObjDataProv" ObjectType="{x:Type vm:SomeViewModel}"/>
</UserControl.Resources>
问题在于,当我使用以下xaml时,它可以工作(ListBox已填充):
<ListBox ItemsSource="{Binding Source={StaticResource vmObjDataProv}, Path=TestList}" Grid.Row="2" Grid.Column="1"/>
但是,当我执行以下操作时,它不再起作用了:
<Grid>
<DataGrid Grid.Row="3" Grid.Column="1" DataContext="{StaticResource vmObjDataProv}" ItemsSource="{Binding TestList}" Background="White">
<DataGrid.Columns>
<!--EDITORS-->
<DataGridTemplateColumn Header="Editor" IsReadOnly="True" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=Name, Mode=OneWay}" IsReadOnly="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我想念什么?
答案 0 :(得分:1)
您缺少的是绑定机制,如本例所示:
<ListBox ItemsSource="{Binding Source={StaticResource vmObjDataProv}, Path=TestList}" />
旨在将ObjectDataProvider
替换为实际提供的数据(在您的案例中为SomeViewModel
的实例)。但是,当您有一个简单的资源引用时:
<DataGrid DataContext="{StaticResource vmObjDataProv}" />
替换不会发生,因此实际DataContext
本身就是ObjectDataProvider
,而不是SomeViewModel
的实例。正确的设置是:
<DataGrid DataContext="{Binding Source={StaticResource vmObjDataProv}}" />