Мне нужно реализовать элемент управления CheckBoxList со свойствами ItemsSource и CheckedItems. Элементы из ItemsSource должны отображаться как отмеченные флажки, если CheckedItems содержит эти значения или не отмечены иным образом. Также мне нужна двусторонняя поддержка привязки данных для свойства CheckedItems (значение этого свойства должно обновляться, когда пользователь нажимает на флажки).
Вот код, который, вероятно, поможет понять мою проблему
XAML:
<UserControl x:Class="Namespace.Controls.CheckBoxList" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ListBox x:Name="LayoutRoot">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
Код позади:
public partial class CheckBoxList : UserControl
{
public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(CheckBoxList), null);
public static readonly DependencyProperty CheckedItemsProperty = DependencyProperty.Register("CheckedItems", typeof(IEnumerable), typeof(CheckBoxList), null);
public IEnumerable ItemsSource
{
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public IEnumerable CheckedItems
{
get { return (IEnumerable)GetValue(CheckedItemsProperty); }
set { SetValue(CheckedItemsProperty, value); }
}
public CheckBoxList()
{
InitializeComponent();
LayoutRoot.SetBinding(ItemsControl.ItemsSourceProperty, new Binding("ItemsSource") { Source = this });
}
}
Я думаю, что мне нужно привязать ListBox к UserControl с помощью пользовательского конвертера, который будет возвращать коллекцию элементов с дополнительным свойством IsChecked, но это работает только в случае односторонней привязки данных.
Похоже, мне нужно двустороннее связывание с двумя свойствами одновременно, но я не знаю, как реализовать это, и буду признателен за любую помощь в этом вопросе.
Заранее спасибо.