コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 public ViewModelContainer(Action firePropertyChanged, Func <object> constructor)
 {
     _firePropertyChanged    = firePropertyChanged;
     _dependent              = new Dependent(() => _viewModel = ForView.Wrap(constructor()));
     _dependent.Invalidated += () => UpdateScheduler.ScheduleUpdate(this);
 }