Грубый макет с использованием MVVM
создайте класс для представления всех данных, необходимых для каждого элемента, например, Проверено и описание
class CustomItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _isSelected;
private string _customColour;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsSelected"));
}
}
}
public string CustomColour
{
get { return _customColour; }
set
{
_customColour = value;
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("CustomColour"));
}
}
}
}
создать класс для представления коллекции элементов, которую вы хотите отобразить
class CustomItems : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<CustomItem> _listOfCustomItems;
public CustomItems()
{
ListOfCustomItems = new ObservableCollection<CustomItem>();
var c = new CustomItem
{
IsSelected = false,
CustomColour = "Red"
};
ListOfCustomItems.Add(c);
c = new CustomItem
{
IsSelected = true,
CustomColour = "Green"
};
ListOfCustomItems.Add(c);
c = new CustomItem
{
IsSelected = false,
CustomColour = "Blue"
};
ListOfCustomItems.Add(c);
}
public ObservableCollection<CustomItem> ListOfCustomItems
{
get { return _listOfCustomItems; }
set
{
_listOfCustomItems = value;
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ListOfCustomItems"));
}
}
}
public List<CustomItem> SelectedItems
{
get
{
return (from customItem in ListOfCustomItems
where customItem.IsSelected
select customItem).ToList();
}
}
}
Добавить в окно
<Window.Resources>
<WpfApplication1:CustomItems x:Key="CI"/>
</Window.Resources>
<Grid DataContext="{StaticResource CI}">
<ListBox ItemsSource="{Binding Path=ListOfCustomItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<DockPanel>
<CheckBox IsChecked="{Binding Path=IsSelected}"/>
<TextBlock Text="{Binding Path=CustomColour}"/>
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
</Grid>
Вы ведете единый список элементов и предоставляете свойство для получения выбранных элементов, которое выполняет простой выбор LINQ. Легко. Измените типы данных по мере необходимости.