为什么DataGrid在代码后面添加时不会显示DataTable中的新列?

时间:2017-06-12 14:41:18

标签: c# wpf xaml data-binding datagrid

我在后面的代码中向DataTable添加/删除列和行。在我的xaml代码中,我有一个DataGrid,ItemsSource绑定到DataTable,但DataGrid不显示新列或删除列。行正常工作。

这是我背后的代码:

  setup do
    sign_in FactoryGirl.create(:admin)
  end

的Xaml:

public MainWindow()
{
    InitializeComponent();

    this.DataContext = this;
    this.Table = new DataTable();
}

private DataTable _Table;
public DataTable Table
{
    get { return this._Table; }
    set { this._Table = value; }
}

public void AddColumn()
{
    this.Table.Columns.Add("ColumnTest");
}

public void AddRow()
{
    this.Table.Rows.Add();
}

添加列或行的方法由按钮单击事件调用。如果我在绑定之前添加了一些列,则列正确显示。

2 个答案:

答案 0 :(得分:0)

默认情况下不会。您必须自己添加任何新列:

public void AddColumn()
{
    this.Table.Columns.Add("ColumnTest");
    dgdMain.Columns.Add(new DataGridTextColumn() { Binding = new Binding("ColumnTest"), Header = "ColumnTest" });
}

只有在设置DataGrid的ItemsSource时才会自动生成列。您之后动态添加到DataTable的所有新列都不会自动添加到DataGrid

答案 1 :(得分:0)

DataGrids不监视基础数据源数据源的架构更改。如果要更新数据网格,请更改AddColumn方法并在代码隐藏中实现INotifyPropertyChanged。如果将此代码从代码隐藏移到ViewModel(强烈推荐),那么您还需要在那里实现INotifyPropertyChanged。

public void AddColumn()
{
    this.Table.Columns.Add("ColumnTest");
    OnPropertyChanged(nameof(Table));
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName) => 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));