I have a set of views and view models in my project. There is a one-to-one mapping of views and view models, so each view requires a particular view model. I'd like to instantiate a series of views given a collection of view models. Here's what I've come up with: public class OverlayBundle : DrawingVisual { private static readonly Dictionary<Type, Func<IOverlayViewModel, DrawingVisual>> _overlayCreators = new Dictionary<Type, Func<IOverlayViewModel, DrawingVisual>> { { typeof(ImageOverlayViewModel), x => new ImageOverlay((ImageOverlayViewModel)x) }, { typeof(ValuesOverlayViewModel), x => new ValuesOverlay((ValuesOverlayViewModel)x) }, { typeof(NoGoAreasOverlayViewModel), x => new NoGoAreasOverlay((NoGoAreasOverlayViewModel)x) }, }; private readonly OverlayBundleViewModel _viewModel; private IEnumerable<Visual> _overlays; public OverlayBundle(OverlayBundleViewModel viewModel) { _viewModel = viewModel; GenerateChildren(); } private void GenerateChildren() { _overlays = _viewModel.GetAllOverlayViewModels().Select(GetOverlay); foreach (var overlay in _overlays) Children.Add(overlay); } private Visual GetOverlay(IOverlayViewModel viewModel) { return _overlayCreators[viewModel.GetType()](viewModel); } } This works, but I feel like there must be a better way. Any feedback would be appreciated.