我正在尝试使用WPFToolkit的DataGrid控件(以及C#/.Net 3.5)来显示每条记录的ComboBox。使用以下代码,ComboBoxes会显示出来,但它们的下拉列表中没有任何项:
<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无法正确绑定?
谢谢, Ben
FYI,“diagnostics”被定义为“xmlns:diagnostics =“ clr-namespace:System.Diagnostics;assembly=WindowsBase””。