public object ViewModel(Func<object> constructor) { if (DesignMode) return constructor(); string caller = new StackFrame(1).GetMethod().Name; if (!caller.StartsWith("get_")) throw new ArgumentException("Only call ViewModel from a property getter."); string propertyName = caller.Substring(4); ForView.Initialize(); ViewModelContainer container; if (!_containerByName.TryGetValue(propertyName, out container)) { container = new ViewModelContainer(() => FirePropertyChanged(propertyName), constructor); _containerByName.Add(propertyName, container); } return container.ViewModel; }