WPF DataGridComboBoxColumn不起作用

时间:2014-10-28 13:29:21

标签: c# wpf datagrid datagridcomboboxcolumn

我有一个名为Person的类和一个名为People的列表,如下所示:

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public List<Person> People;

        public MainWindow()
        {
            InitializeComponent();

            People = new List<Person>();
            People.Add(new Person() { ID = 1, Name = "John" });
            People.Add(new Person() { ID = 2, Name = "Mike" });
        }
    }

    public class Person
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

我想在DataGrid中显示2人参与者,使用组合框在2人之间进行选择。

<DataGrid x:Name="dataGrid1" Height="300">
    <DataGridComboBoxColumn Header="Name" DisplayMemberPath="Name" SelectedItemBinding="{Binding Path=Name}">
        <DataGridComboBoxColumn.EditingElementStyle>
            <Style TargetType="ComboBox">
                <Setter Property="ItemsSource" Value="{Binding Path=People}"/>
            </Style>
        </DataGridComboBoxColumn.EditingElementStyle>
        <DataGridComboBoxColumn.ElementStyle>
            <Style TargetType="ComboBox">
                <Setter Property="ItemsSource" Value="{Binding Path=People}"/>
            </Style>
        </DataGridComboBoxColumn.ElementStyle>
    </DataGridComboBoxColumn>
</DataGrid>

但DataGrid根本没有显示任何内容。问题是什么?

2 个答案:

答案 0 :(得分:0)

不应该在<DataGrid.Columns>标签内吗?

答案 1 :(得分:0)

  1. People必须是属性,而不是字段。
  2. 您必须先填充集合,然后将其分配到People,您必须用ObservableCollection<Person>替换列表,以便网格检测到你添加的项目。
  3. 您必须在调用People之前指定InitializeComponent() 包含该属性的类必须实现INotifyPropertyChanged并触发分配PropertyChangedPeople,以便网格检测新集合。
  4. 正如@Koen指出的那样,您的列定义必须由<DataGrid.Columns>标记共同包围。