从DataGrid中访问Window的DataContext

时间:2010-08-03 18:02:29

标签: wpf data-binding binding datagridcomboboxcolumn

从DataGrid中访问Window的DataContext时遇到了一些问题。

DataGrid绑定到IBindingList:

public IBindingList Items{ get; set; }
    private void initItems()
    {
        //ItemFactory is a Linq2SQL Context, Items is the view of availabe Items
        this.Items = this.ItemFactory.Items.GetNewBindingList();
    }

在我的xaml中,我尝试将这些数据填入ComboBox:

 <DataGridComboBoxColumn Header="Typ" 
                             DisplayMemberPath="Description"
                             SelectedValuePath="ItemID"      
                             ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Mode=OneWay, Path=DataContext.Items, UpdateSourceTrigger=PropertyChanged}" />

但它不起作用。我已经尝试了很多变种。 ComboBox没有填充。
任何帮助非常感谢!

注意:

同一个Window中的以下ComboBox可以正常工作:

<ComboBox x:Name="workingCombo" ItemsSource="{Binding Path=Items}" DisplayMemberPath="Description" SelectedValuePath="ItemID" />

1 个答案:

答案 0 :(得分:1)

DataGridComboBoxColumn没有直接连接到可视化树,因此FindAncestor - 操作将失败(并且DataContext也不会被继承)。

  • 最简单的解决方案是 为每一行创建一个ViewModel ,并在ItemsSource中提供 对于ComboBox。
  • 使用DataGridTemplateColumn 并将ComboBox放入。{ DataTemplate有帮助。
  • 这里 是关于这个问题的另一篇文章。另请参阅 this 。交