public static void LoadWSOFile(string filePath, MainViewModel viewModel) { // Load user's current options and make a copy. BuildModel(viewModel, false); IVisitorWithContext visitor = new XmlReadVisitor(); UIOptionRootType optionsRoot = new UIOptionRootType(); optionsRoot.Accept(visitor, filePath); foreach (var cat in optionsRoot.Categories) { foreach (var subCat in cat.SubCategories) { foreach (var opt in subCat.Options) { if (opt is UIOptionGroupType) { LoadGroup(viewModel, opt); } IOption targetOpt = viewModel.FindOption(opt.Name); if (targetOpt != null) { LoadOption(targetOpt, opt); } } } } // We need to pass the OptionsRoot object to somebody who can display it in UI }