Есть DataGrid:
<DataGrid x:Name="c_dataGrid" ItemsSource="{Binding myDT.DefaultView, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="True"
CanUserAddRows="False" CanUserDeleteRows="False"
CanUserReorderColumns="False" CanUserResizeColumns="False"
CanUserResizeRows="False" CanUserSortColumns="False"
HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden".>
Изначально, мы привязывает к ней DataTable: public DataTable myDT { get; set; }. Если мы изменяем, например, заголовок столбца через DataTable, то он изменяется и на форме, но если мы добавляем новый столбец в DataTable, например вот так: dataTable.Columns.Add("NewRowName", typeof(string), "");
или вот так:
dataTable.Columns.Add("NewRowName");
foreach (DataRow dataTableRow in dataTable.Rows) {
dataTableRow["NewRowName"] = "";
}
То ничего не происходит, в DataTable столбец добавился, а на форму - нет.
Как это исправить?
Если честно, то не знаю, почему это работает, возможно криво работает INotifyPropertyChanged внутри DataTable, но обнуление коллекции исправило мою проблему.
Создаем событие для оповещения об изменении коллекции:
public delegate void DataTableUpdated(DataTable dt);
public event DataTableUpdated DataTableUpdate;
В кострукторе VM подписываемся на событие:
DataTableUpdate += dt => {
myDT = null;
myDT = dt;
};
Вполне возможно, что это не самый лучший вариант.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости