Пользовательский контроль и привязка элементов

Я создаю настраиваемый элемент управления, который будет содержать сетку с динамически добавленными (или удаленными) строками и столбцами. Каждая ячейка должна содержать флажок, который будет привязан к некоторой модели. Если пользователь нажмет на флажок, словарь должен обновиться.

Model.cs

public class Model
{
 public Model(List<panelmodel> panels)
 {
 this.Panels = new Dictionary<int, bool="">(); 
 panels.ForEach(panel => this.Panels.Add(panel.Id, false));
 }

 ...

 public Dictionary<int, bool=""> Panels { get; set; } 
}
</int,></int,></panelmodel>

CustomControl.cs

CheckBox checkBox = new CheckBox
{
 HorizontalAlignment = HorizontalAlignment.Center,
 VerticalAlignment = VerticalAlignment.Center
};
Grid.SetRow(checkBox, index);
Grid.SetColumn(checkBox, innerIndex);

Binding binding = new Binding(string.Format("Panels[{0}]", panel.Id));
binding.Source = this.Configurations;
binding.Mode = BindingMode.TwoWay;
checkBox.SetBinding(CheckBox.IsCheckedProperty, binding);

this.mainGrid.Children.Add(checkBox);

Как связать определенный флажок с элементом в словарных Panels? Словарь содержит пару int bool что означает, что панель с идентификатором x включена или выключена.

Теперь, если я нажму на флажок, ничего не произойдет. Отладчик показывает, что все панели являются ложными (выключены).

1 ответ

Из того, что вы описали, я бы приблизился к этому с помощью ItemControl, где ItemsSource привязан к вашей коллекции.

Затем добавьте ItemTemplate, который представляет bool через привязку к флажку.

Вы можете установить элемент ItemsControl PanelTemplate в WrapPanel, чтобы все еще получить вид сетки.

licensed under cc by-sa 3.0 with attribution.