我正在代码隐藏的DataTable中添加/删除列和行。在我的 xaml 代码中,我有一个 DataGrid,其中 ItemsSource 绑定到数据表,但 DataGrid 不显示新列或删除的列。行工作正常。
这是我背后的代码:
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();
}
Xaml:
<DataGrid Name="dgdMain"
Grid.Column="1"
AutoGenerateColumns="True"
ItemsSource="{Binding Path=Table.DefaultView}">
</DataGrid>
添加列或行的方法由按钮单击事件调用。如果我在绑定之前添加了一些列,则列会正确显示。
默认情况下不会。您必须自己添加任何新列:
public void AddColumn()
{
this.Table.Columns.Add("ColumnTest");
dgdMain.Columns.Add(new DataGridTextColumn() { Binding = new Binding("ColumnTest"), Header = "ColumnTest" });
}
只有在设置数据网格的ItemsSource
时,才会自动生成这些列。在此之后动态添加到DataTable
的任何新列都不会自动添加到DataGrid
中。
数据网格不监视基础数据表数据源上的架构更改。如果要更新数据网格,请更改 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));