void RecursiveFillChildren(ItemCollection source, IEnumerable <IRuntimeModel> children) { foreach (var item in children) { if (item.IsSeparator) { source.Add(new Separator { UseLayoutRounding = true, }); } else { var menuItem = new RuntimeMenuItem(item); menuItem.Click += OnMenuItemClicked; source.Add(menuItem); RecursiveFillChildren(menuItem.Items, item.Children); } } }
void FillSource(ItemCollection source, IEnumerable <IRuntimeModel> model) { foreach (var item in source.OfType <MenuItem> ()) { item.Click -= OnMenuItemClicked; foreach (var subItem in item.Items.OfType <MenuItem> ()) { subItem.Click -= OnMenuItemClicked; } } source.Clear(); foreach (var item in model) { if (item.HasParent) { continue; } if (item.IsSeparator) { source.Add(new Separator { UseLayoutRounding = true, }); } else { var menuItem = new RuntimeMenuItem(item); menuItem.Click += OnMenuItemClicked; foreach (var child in item.Children) { var childMenuItem = new RuntimeMenuItem(item); childMenuItem.Click += OnMenuItemClicked; menuItem.Items.Add(childMenuItem); } source.Add(menuItem); } } }