DataGridComboBoxColumn 绑定到自定义列表 class
DataGridComboBoxColumn binding to a list of custom class
<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 新手,我无法将 data/item 源绑定到 DataGridComboboxCOlumn。这里的组合框根本不可见。
请帮忙。
问题是 DataGrid 的 dataContext 没有被传递到 DataGridComboBoxBolumn.. 因为它们不是同一可视化树的一部分。
所以...当您尝试绑定到 DataGrid 中的 CategoryModel 的值时...找不到它。
Here 是解决此问题的一种方法,它使用 ElementStyles 通过使 Column 成为与 DataGrid 相同的可视化树的一部分来转发 dataContext:
<!—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 绑定到 "CategoriesList",而不是 "ProductsInCategory")
<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 新手,我无法将 data/item 源绑定到 DataGridComboboxCOlumn。这里的组合框根本不可见。 请帮忙。
问题是 DataGrid 的 dataContext 没有被传递到 DataGridComboBoxBolumn.. 因为它们不是同一可视化树的一部分。
所以...当您尝试绑定到 DataGrid 中的 CategoryModel 的值时...找不到它。
Here 是解决此问题的一种方法,它使用 ElementStyles 通过使 Column 成为与 DataGrid 相同的可视化树的一部分来转发 dataContext:
<!—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 绑定到 "CategoriesList",而不是 "ProductsInCategory")