Эффективно визуализировать и редактировать данные табличного типа позволяет стандартный компонент WPF под названием DataGrid. С помощью этого компонента можно, например, организовать редактирование таблиц баз данных.

Принцип работы компонента очень простой. В качестве источника данных ItemSource компоненту присваивается созданная в программе коллекция  ObservableCollection<T> collection:

DG.ItemsSource = collection; // DG — наш DataGrid

Коллекция заполняется объектами одного класса. Например, пусть есть некоторый класс, который содержит три переменные (например, класс можно использовать как промежуточный для данных таблицы БД, кде все переменные класса могут описать содержимое одной строки БД):

public class Data
{
public double A { get; set; }
public string B { get; set; }
public double C { get; set; }

public StepData(double a, string b, double c)
{
A = a;
B = b;
C = c;

}

}

Тогда коллекция ObservableCollection<Data> заполняется объектами класса Data:

collection.Add(new Data(1, «1», 1));
collection.Add(new Data(2, «2», 2));
collection.Add(new Data(3, «33», 3));

 

Далее в XAML необходимо указать правила визуализации коллекции:

<DataGrid Name=»DG» AutoGenerateColumns=»False» Margin=»0,0,0,100″>
<DataGrid.Columns>
<DataGridTextColumn Header=»Параметр» Width=»100″ Binding=»{Binding A}»></DataGridTextColumn>
<DataGridTextColumn Header=»Тип» Width=»100″ Binding=»{Binding B}»></DataGridTextColumn>
<DataGridTextColumn Header=»Значение» Width=»100″ Binding=»{Binding C}»></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>

Команда Binding=»{Binding A}»  означает, что в столбец «Параметр» будет помещено значение переменной A класса Data, который в свою очередь является элементом коллекции-источника.

Редактирование данных в таблице автоматически приводит к изменению данных в коллекции и наоборот.

Для редактирования таблицы есть стандартные приемы. Мышью или клавиатурой ставим фокус на нужную ячейку, нажимаем F2 и производим редактирование. Применить изменения — «Enter», отменить — «Esc». Для удаления всей строки помещаем на нее фокус и нажимаем «Delete».

Для добавления новой строки можем обработать, например, нажатие на специальную кнопку, обработчик которой будет содержать примерно следующий код:

private void CmAddNew(object sender, RoutedEventArgs e)
{
if (collection == null)
{
collection = new ObservableCollection<Data>();
gridProducts.ItemsSource = collection;
}
collection.Add(new Data(4, «444», 4));
}

Работающую программу-демонстрацию можно скачать здесь DataGridPattern