Вы бы использовали ItemsControl или производный класс, такой как Selector со свойством ItemsPanel , установленным в Grid
.В свойстве ItemsContainerStyle для стиля будет установлено значение ContentControl
.ContentControl
- это объект, который будет сгенерирован для каждого элемента в списке, с которым ваш ItemsControl будет связан с использованием свойства ItemsSource .В этом стиле вы настроите ControlTemplate
для ContentControl
на что-то, что включает Границу или Прямоугольник или аналогичный для получения линий сетки.Корневой элемент управления в вашем ControlTempalte
будет иметь свойства Grid.Row и Grid.Column, связанные со свойствами .Row
и .Column
ваших элементов данных, которые будут DataContext
.
.ItemsControl повторяет ObservableCollection этих DataItems.
<ItemsControl ItemsSource={Binding MyDataItems} ....
Ваш DataItem будет выглядеть примерно так:
public class DataItem : INotifyPropertyChanged
{
public int Row
{
get { // return field }
set { // raise the PropertyChanged event here }
}
public int Column
{
get { // return field }
set { // raise the PropertyChanged event here }
}
}