Честно говоря, я бы создал список объектов, содержащих как строку, так и логическое значение, указывающее, отмечен ли он.
С помощью небольшого Linq вы можете сгенерировать свой список объектов и связать его с itemSource вместо привязки списка строк.
В конце будет проще, особенно если вам действительно нужно что-то обновить, если пользователю разрешено ставить / снимать флажки.
== обновление ==
в ответ на комментарий я расскажу об этом, потому что я не уверен, что понимаю, в чем будет проблема: при условии, что у нас есть полный список (AvailableItems) и список выбранных элементов (ItemsToGenerate):
public class ItemEntry
{
public string Name { get; set; }
public bool IsSelected {get; set; }
}
...
_Items = from item in AvailableItems
select new ItemEntry() {
Name = item,
IsSelected = ItemsToGenerate.contains(item)
}).ToList();
Затем вы можете связать свой список следующим образом, выставив _Items как свойство с именем Items:
<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Позже вы можете выбрать из _Items, где IsSelected - true, чтобы получить выбранные элементы, если вам нужно.
Кроме того, если ItemsToGenerate может стать большим, вы должны создать HashSet значений и использовать его в запросе, который должен сделать его быстрее, если это необходимо.