wpf 绑定 DataGridComboBoxColumn
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16303114/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Binding DataGridComboBoxColumn
提问by Unforgiven
I am trying to bind ObservableCollection of T to DataGridComboBoxColumn of DataGrid.
DataGrid definition is :
我正在尝试将 T 的 ObservableCollection 绑定到 DataGrid 的 DataGridComboBoxColumn。
DataGrid 定义是:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Model, IsAsync=True}">
<DataGrid.Columns>
<DataGridTextColumn Header="Column Entry" IsReadOnly="True" Binding="{Binding ColumnName}"/>
<DataGridComboBoxColumn Header="Road Type" ItemsSource="{Binding RoadTypes}"/>
</DataGrid.Columns>
</DataGrid>
This is ViewModel and Model
这是 ViewModel 和 Model
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var viewModel = new ViewModel();
DataContext = viewModel;
}
}
public class ViewModel : ViewModelBase
{
private ObservableCollection<Model> _model;
public ViewModel()
{
var list = new List<Model>();
var roadTypes = new ObservableCollection<RoadType>
{
new RoadType
{
Code = 1,
Id = 1,
Name = "Name1"
},
new RoadType
{
Code = 1,
Id = 1,
Name = "Name1"
}
};
Model = new ObservableCollection<Model>
{
new Model
{
ColumnName = "Col1",
RoadTypes = roadTypes
},
new Model
{
ColumnName = "Col1",
RoadTypes = roadTypes
}
};
}
public ObservableCollection<Model> Model
{
get { return _model; }
set
{
_model = value;
RaisePropertyChanged(() => Model);
}
}
}
public class RoadType
{
public int Id { get; set; }
public int Code { get; set; }
public string Name { get; set; }
}
public class Model : ObservableObject
{
private ObservableCollection<RoadType> _roadTypes;
public string ColumnName { get; set; }
public ObservableCollection<RoadType> RoadTypes
{
get { return _roadTypes; }
set
{
_roadTypes = value;
RaisePropertyChanged(() => RoadTypes);
}
}
}
DataGrid displays text column as well but it doesn't display ComboBox values.
What's wrong?
DataGrid 也显示文本列,但不显示 ComboBox 值。
怎么了?
回答by Jason Massey
Since RoadTypes isn't a simple list of strings you need to tell your combobox what property it needs to display in the ComboBox. Try adding
由于 RoadTypes 不是一个简单的字符串列表,您需要告诉组合框它需要在组合框中显示什么属性。尝试添加
DisplayMemberPath="Name"
to your combobox declartion
到您的组合框声明
--
——
Update:
更新:
Okay, this is a known "feature" with WPF datagrids. The issue is that the DataGridComboBox doesn't have the DataContext of the DataGrid. I modified the binding for the ComboBox to look like this:
好的,这是 WPF 数据网格的一个已知“功能”。问题是 DataGridComboBox 没有 DataGrid 的 DataContext。我将 ComboBox 的绑定修改为如下所示:
<DataGridComboBoxColumn DisplayMemberPath="Name">
<DataGridComboBoxColumn.ElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding Path=RoadTypes}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding Path=RoadTypes}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
I modified the code you provided in your download link and the combobox items were displayed when I opened the combobox dropdown.
我修改了您在下载链接中提供的代码,并在打开组合框下拉菜单时显示了组合框项目。
Check out some of these links for further clarification:
查看其中一些链接以获得进一步的说明:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b4b13a72-47f9-452f-85c6-6c4b5b606df5/
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b4b13a72-47f9-452f-85c6-6c4b5b606df5/
How to bind collection to WPF:DataGridComboBoxColumn
如何将集合绑定到 WPF:DataGridComboBoxColumn
Excedrin headache #3.5.40128.1: Using combo boxes with the WPF DataGrid
Excedrin 头痛 #3.5.40128.1:在 WPF DataGrid 中使用组合框
What led me to look at all of these sites is looking at the Output window and noticing the error message System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element.message
促使我查看所有这些站点的原因是查看“输出”窗口并注意到错误消息System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。信息

