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); }
protected IEnumerable <T> GetCollection <T>(Func <IEnumerable <T> > getMethod) { ForView.Initialize(); string caller = new StackFrame(1).GetMethod().Name; if (!caller.StartsWith("get_")) { throw new ArgumentException("Only call Get from a property getter."); } return(GetCollection <T>(caller.Substring(4), getMethod)); }
protected IEnumerable <T> GetCollection <T>(Func <IEnumerable <T> > getMethod, [CallerMemberName] string propertyName = "") { ForView.Initialize(); DependentPropertyBase property; if (!_dependentPropertyByName.TryGetValue(propertyName, out property)) { property = new DependentCollection <T>(getMethod); _dependentPropertyByName.Add(propertyName, property); } return((IEnumerable <T>)property.Value); }
protected T Get <T>(Func <T> getMethod, [CallerMemberName] string propertyName = "") { ForView.Initialize(); DependentPropertyBase property; if (!_dependentPropertyByName.TryGetValue(propertyName, out property)) { property = new DependentAtom <T>(() => FirePropertyChanged(propertyName), getMethod); _dependentPropertyByName.Add(propertyName, property); } return((T)property.Value); }
public object ViewModel(Func <object> constructor, [CallerMemberName] string propertyName = "") { if (DesignMode) { return(constructor()); } ForView.Initialize(); ViewModelContainer container; if (!_containerByName.TryGetValue(propertyName, out container)) { container = new ViewModelContainer(() => FirePropertyChanged(propertyName), constructor); _containerByName.Add(propertyName, container); } return(container.ViewModel); }