DataGridComboBoxColumn绑定到自定义类列表

时间:2015-01-29 18:11:31

标签: c# wpf datagridcomboboxcolumn

<DataGridComboBoxColumn x:Name="categoryColumn" Header="Category"     
                                    SelectedValueBinding="{Binding CategoryID}"
                                    SelectedValuePath="CategoryID"
                                    DisplayMemberPath="CategoryName"
                                    Width="200">

categoryColumn.ItemsSource = FetchData.CategoriesList;
 List<FileModel> _files = new List<FileModel>();
        _files.Clear();
        _files.Add(new FileModel
        {
            Filename = "Test.pdf",
            Title = "Test",
            Category = new CategoryModel
            {
                CategoryID = 63,
                CategoryName = "Personal"
            }
        });
        DataGrid.ItemsSource = _files;

成为WPF的新手我无法将数据/项目源绑定到DataGridComboboxCOlumn。这里的组合框根本不可见。 请帮忙。

1 个答案:

答案 0 :(得分:1)

问题是DataGrid的dataContext没有传递给DataGridComboBoxBolumn ..因为它们不是同一个可视树的一部分。

所以......当你尝试绑定到DataGrid中的CategoryModel的值时......它找不到它。

Here是解决此问题的一种方法,它使用ElementStyles转发dataContext,方法是使Column成为与DataGrid相同的可视树的一部分:

<!—now itemssource will find the correct DataContext-->
<dg:DataGridComboBoxColumn Header="Current Product"
    SelectedValueBinding="{Binding Path=CurrentProduct}"
      SelectedValuePath="ProductID"
    DisplayMemberPath="ProductName">              
  <dg:DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="ComboBox">
      <Setter Property="ItemsSource" Value="{Binding Path=ProductsInCategory}" />
    </Style>
  </dg:DataGridComboBoxColumn.ElementStyle>
  <dg:DataGridComboBoxColumn.EditingElementStyle>
    <Style TargetType="ComboBox">
      <Setter Property="ItemsSource" Value="{Binding Path=ProductsInCategory}" />
    </Style>
  </dg:DataGridComboBoxColumn.EditingElementStyle>
</dg:DataGridComboBoxColumn>

您可以使用此方法,只需使您的CategoriesList成为可以绑定到的属性:

public ObservableCollection<CategoryModel> CategoriesList { get; set; }

然后在您的设置代码中:

CategoriesList = FetchData.CategoriesList;

(因此在上面的示例中,您将ComboBox的ItemsSource绑定到&#34; CategoriesList&#34;,而不是&#34; ProductsInCategory&#34;)