WPF是否可以使用ObjectDataProvider填充DataGrid?

时间:2018-01-26 12:33:17

标签: wpf xaml

我问这个问题,因为我无法让它发挥作用。

<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>

我想念什么?

1 个答案:

答案 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}}" />