1

我有一个将 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,或者我在那里做错了什么,是否有任何已知的原因?谢谢你的建议。

4

0 回答 0