将DataGridComboBoxColumn ItemsSource绑定到RelativeSource FindAncestor不起作用

时间:2010-07-05 20:35:24

标签: binding wpftoolkit wpfdatagrid

我正在尝试使用WPFToolkit的DataGrid控件(和C#/ .Net 3.5)来显示每个记录的ComboBox。使用下面的代码,ComboBox会显示,但它们的下拉列表不包含任何项目:

<wpftkit:DataGrid ItemsSource="{Binding TransactionToEdit.SisterTransactions}"
          AutoGenerateColumns="False">
<wpftkit:DataGrid.Columns>
    <wpftkit:DataGridComboBoxColumn Header="Account" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type StackPanel},  diagnostics:PresentationTraceSources.TraceLevel=High}, Path=DataContext.Accounts}" DisplayMemberPath="Name"/>
</wpftkit:DataGrid.Columns>
</wpftkit:DataGrid>

此外,Visual Studio的输出窗口显示以下错误:

System.Windows.Data Error: 4 : Cannot find source for binding with 
  reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.StackPanel', AncestorLevel='1''. 
  BindingExpression:Path=DataContext.Accounts; DataItem=null; target element is 
  'DataGridComboBoxColumn' (HashCode=25733404); target property is 
  'ItemsSource' (type 'IEnumerable')

但是,以下代码按预期工作(ComboBox的下拉列表已正确填充):

<ItemsControl ItemsSource="{Binding TransactionToEdit.SisterTransactions}">
<ItemsControl.ItemTemplate>
    <DataTemplate>
    <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type StackPanel}}, Path=DataContext.Accounts, diagnostics:PresentationTraceSources.TraceLevel=High}" DisplayMemberPath="Name"/>
    </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

请注意,DataGrid和ItemsControl都具有相同的ItemsSource字符串。 DataGridComboBoxColumn和ComboBox也是如此。一个控件正确绑定而另一个控件没绑定。

为什么DataGridComboBoxColumn ItemsSource没有正确绑定?

谢谢你,

仅供参考,diagnostics定义为xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"

1 个答案:

答案 0 :(得分:3)