我有一个将 xamdatagrid 添加到网格的用户控件,如下所示:
<Grid Name="grid1">
<Grid.Resources>
<Style TargetType="{x:Type igEditors:XamComboEditor}">
<Setter Property="ItemsSource" Value="{Binding ElementName=grid1, Path=DataContext.Test}"/>
<Setter Property="DisplayMemberPath" Value="Key"/>
</Style>
</Grid.Resources>
<igDP:XamDataGrid DataSource="{Binding}" Name="xamDataGrid1" VerticalAlignment="Top" >
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:Field Name="Name" >
<igDP:Field.Settings>
<igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}"/>
</igDP:Field.Settings>
</igDP:Field>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
</Grid>
我在构造函数的代码隐藏中为 grid1 设置 DataContext。这适用于 WPF 4.0,但不适用于 3.5。在 3.5 中,我得到“找不到与引用'ElementName = grid1'的绑定源”错误。为了使绑定与 3.5 一起工作,我必须使用 ObjectDataProvider 作为:
<Grid Name="grid1">
<Grid.Resources>
<ObjectDataProvider x:Key="myData" ObjectType="{x:Type local:ViewModel}"></ObjectDataProvider>
<Style TargetType="{x:Type igEditors:XamComboEditor}">
<Setter Property="ItemsSource" Value="{Binding Source={StaticResource myData}, Path=Test}"/>
<Setter Property="DisplayMemberPath" Value="Key"/>
</Style>
</Grid.Resources>
<igDP:XamDataGrid DataSource="{Binding}" Name="xamDataGrid1" VerticalAlignment="Top" >
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:Field Name="Name" >
<igDP:Field.Settings>
<igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}"/>
</igDP:Field.Settings>
</igDP:Field>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
</Grid>
为什么第一个代码片段中的 ElementName 绑定不适用于 WPF 3.5,或者我在那里做错了什么,是否有任何已知的原因?谢谢你的建议。