/// <summary> /// Wraps the specified view. /// </summary> /// <param name="view">The view.</param> /// <param name="viewModelSource">The view model source containing the <c>ViewModel</c> property.</param> /// <param name="wrapOptions">The wrap options.</param> /// <returns>The <see cref="IViewModelWrapper" />.</returns> /// <exception cref="ArgumentNullException">The <paramref name="view" /> is <c>null</c>.</exception> public IViewModelWrapper Wrap(IView view, object viewModelSource, WrapOptions wrapOptions) { Argument.IsNotNull("view", view); Argument.IsNotNull("viewModelSource", viewModelSource); if (!_wrappers.TryGetValue(view, out var wrapper)) { try { // This is "sort of" a lock, we might recursively call this while we are // creating the wrapper, so need to skip *while* we are creating it _wrappers.Add(view, _tempObject); #if XAMARIN || XAMARIN_FORMS wrapper = new ViewModelWrapper(view); #else wrapper = CreateViewModelGrid(view, viewModelSource, wrapOptions); #endif } finally { // Remove the temp object _wrappers.Remove(view); } if (wrapper != null) { _wrappers.Add(view, wrapper); } } return(wrapper); }
/// <summary> /// Wraps the specified view. /// </summary> /// <param name="view">The view.</param> /// <param name="viewModelSource">The view model source containing the <c>ViewModel</c> property.</param> /// <param name="wrapOptions">The wrap options.</param> /// <returns>The <see cref="IViewModelWrapper" />.</returns> /// <exception cref="ArgumentNullException">The <paramref name="view" /> is <c>null</c>.</exception> public IViewModelWrapper Wrap(IView view, object viewModelSource, WrapOptions wrapOptions) { Argument.IsNotNull("view", view); Argument.IsNotNull("viewModelSource", viewModelSource); #if XAMARIN || XAMARIN_FORMS var viewModelWrapper = new ViewModelWrapper(view); return(viewModelWrapper); #else return(CreateViewModelGrid(view, viewModelSource, wrapOptions)); #endif }
/// <summary> /// Wraps the specified view. /// </summary> /// <param name="view">The view.</param> /// <param name="viewModelSource">The view model source containing the <c>ViewModel</c> property.</param> /// <param name="wrapOptions">The wrap options.</param> /// <returns>The <see cref="IViewModelWrapper" />.</returns> /// <exception cref="ArgumentNullException">The <paramref name="view" /> is <c>null</c>.</exception> public IViewModelWrapper Wrap(IView view, object viewModelSource, WrapOptions wrapOptions) { Argument.IsNotNull("view", view); Argument.IsNotNull("viewModelSource", viewModelSource); #if XAMARIN var viewModelWrapper = new ViewModelWrapper(view); return viewModelWrapper; #else return CreateViewModelGrid(view, viewModelSource, wrapOptions); #endif }
public ViewModelWrapper ConstructViewModel(Type type) { var instance = Activator.CreateInstance(type); var token = "token_" + _tokenCounter++; var viewModelWrapper = new ViewModelWrapper { ViewModel = instance, RefToken = token }; _viewModelInstances[token] = viewModelWrapper; foreach (var field in type.ObservableFields()) { var localField = field; // Make sure closure doesn't change variable. var fieldValue = (IObservable)localField.GetValue(instance); fieldValue.Subscribe(newValue => AddPendingChange(localField.Name, newValue, token)); } return(viewModelWrapper); }