将DataGridComboBoxColumn的ItemsSource绑定到RelativeSource FindAncestor无法工作

4

我正在尝试使用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””。

我也遇到了同样的问题!DataGridComboBoxColumn就是个有问题的东西! - Shimmy Weitzhandler
1个回答

5

有趣的是,如果我创建一个包含ComboBox的自定义DataGridColumn,并使用与上述相同的ItemsSource绑定字符串,它可以正常工作。

<wpftkit:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
    <ComboBox SelectedItem="{Binding Account}" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type StackPanel}}, Path=DataContext.Accounts}"        DisplayMemberPath="Name" />
    </DataTemplate>
</wpftkit:DataGridTemplateColumn.CellTemplate>

3
我发现如果我把 ComboBox 放在 CellTemplate 中,会发生奇怪的事情...例如,当行切换到编辑模式时,ComboBox 会失去选定的值。一个简单的解决方法是让 CellTemplate 显示一个 TextBlock,然后将 ComboBox 放在 CellEditingTemplate 中。 - Ben Gribaudo
1
这是一个 bug,已经被提出。 - No hay Problema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接