在XAML中数据绑定到父datacontext

nic*_*las 4 wpf xaml

这两个元素所在的用户控件具有名为ColumnTypes的属性.

每一元素用相同的表达到主的datacontext相对参考,但第一个广告工作,而后者则.

你有任何想法如何调查吗?

<DataGrid  x:Name="DataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Table}"  >
    <DataGrid.Columns>
            <DataGridComboBoxColumn  Header="Type"   >
                <DataGridComboBoxColumn.ItemsSource>
                    <Binding Path="DataContext.GetColumnTypes"   RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" />
                </DataGridComboBoxColumn.ItemsSource>
            </DataGridComboBoxColumn>
    </DataGrid.Columns>
</DataGrid>
<ComboBox Grid.Row="1">
    <ComboBox.ItemsSource>
        <Binding Path="DataContext.GetColumnTypes"   RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" />
    </ComboBox.ItemsSource>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

System.Windows.Data错误:4:无法找到绑定源,引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.UserControl',AncestorLevel ='1''.BindingExpression:路径= DataContext.GetColumnTypes; 的DataItem = NULL; target元素是'DataGridComboBoxColumn'(HashCode = 53813616); target属性是'ItemsSource'(输入'IEnumerable')

Pet*_*sen 8

这是一个已知的限制DataGridComboBoxColumn.

你可以在MSDN上看到你可以绑定到它的ItemsSource属性的东西.常规财产不是其中之一,所以你的情况不会起作用.

实现你想要的不同方法是制作一个DataGridTemplateColumn包含a的东西ComboBox.

在你的情况下,看起来像这样:

<DataGrid.Columns>
    <DataGridTemplateColumn Header="Type">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox ItemsSource="{Binding DataContext.GetColumnTypes, 
                        RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)