<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。这里的组合框根本不可见。 请帮忙。
答案 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;)