我在后面的代码中向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();
}
添加列或行的方法由按钮单击事件调用。如果我在绑定之前添加了一些列,则列正确显示。
答案 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));