Вы можете использовать метод stati c, который рекурсивно добавляет отмеченные элементы в коллекцию:
public static void AddCheckedItems(
CheckTreeSource item, ICollection<CheckTreeSource> checkedItems)
{
if (item.IsChecked)
{
checkedItems.Add(item);
}
if (item.Children != null)
{
foreach (var childItem in item.Children)
{
AddCheckedItems(childItem, checkedItems); // recursive call
}
}
}
Затем вызывайте его с элементом root в качестве начала:
var checkedItems = new List<CheckTreeSource>();
AddCheckedItems(TreeRoot, checkedItems);
В качестве альтернативы объявите метод в классе CheckTreeSource:
public void AddCheckedItems(ICollection<CheckTreeSource> checkedItems)
{
if (IsChecked)
{
checkedItems.Add(this);
}
if (Children != null)
{
foreach (var childItem in Children)
{
childItem.AddCheckedItems(checkedItems);
}
}
}
и назовите его следующим образом:
var checkedItems = new List<CheckTreeSource>();
TreeRoot.AddCheckedItems(checkedItems);
Вы также можете взглянуть на это: { ссылка }