本文整理汇总了C#中IMvxBundle类的典型用法代码示例。如果您正苦于以下问题:C# IMvxBundle类的具体用法?C# IMvxBundle怎么用?C# IMvxBundle使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
IMvxBundle类属于命名空间,在下文中一共展示了IMvxBundle类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CallBundleMethod
public static void CallBundleMethod(this IMvxViewModel viewModel, MethodInfo methodInfo, IMvxBundle bundle)
{
var parameters = methodInfo.GetParameters().ToArray();
if (parameters.Count() == 1
&& parameters[0].ParameterType == typeof(IMvxBundle))
{
// this method is the 'normal' interface method
methodInfo.Invoke(viewModel, new object[] { bundle });
return;
}
if (parameters.Count() == 1
&& !MvxSingletonCache.Instance.Parser.TypeSupported(parameters[0].ParameterType))
{
// call method using typed object
var value = bundle.Read(parameters[0].ParameterType);
methodInfo.Invoke(viewModel, new[] { value });
return;
}
// call method using named method arguments
var invokeWith = bundle.CreateArgumentList(parameters, viewModel.GetType().Name)
.ToArray();
methodInfo.Invoke(viewModel, invokeWith);
}
示例2: Load
public virtual IMvxViewModel Load(Intent intent, IMvxBundle savedState, Type viewModelTypeHint)
{
if (intent == null)
{
MvxTrace.Error("Null Intent seen when creating ViewModel");
return null;
}
if (intent.Action == Intent.ActionMain)
{
MvxTrace.Trace("Creating ViewModel for ActionMain");
return this.DirectLoad(savedState, viewModelTypeHint);
}
if (intent.Extras == null)
{
MvxTrace.Trace("Null Extras seen on Intent when creating ViewModel - have you tried to navigate to an MvvmCross View directly? Will try direct load");
return this.DirectLoad(savedState, viewModelTypeHint);
}
IMvxViewModel mvxViewModel;
if (this.TryGetEmbeddedViewModel(intent, out mvxViewModel))
{
MvxTrace.Trace("Embedded ViewModel used");
return mvxViewModel;
}
MvxTrace.Trace("Attempting to load new ViewModel from Intent with Extras");
var toReturn = this.CreateViewModelFromIntent(intent, savedState);
if (toReturn != null)
return toReturn;
MvxTrace.Trace("ViewModel not loaded from Extras - will try DirectLoad");
return this.DirectLoad(savedState, viewModelTypeHint);
}
示例3: OnCreate
public static void OnCreate(this IMvxFragmentView fragmentView, IMvxBundle bundle, MvxViewModelRequest request = null)
{
if (fragmentView.ViewModel != null)
{
//TODO call MvxViewModelLoader.Reload when it's added in MvvmCross, tracked by #1165
//until then, we're going to re-run the viewmodel lifecycle here.
RunViewModelLifecycle(fragmentView.ViewModel, bundle, request);
return;
}
Fragment fragment = fragmentView as Fragment;
if (fragmentView == null)
throw new InvalidOperationException($"Something really weird. ${nameof(fragmentView)} passed is not a Fragment!");
// as it is called during onCreate it is safe to assume that fragment has Activity attached.
var viewModelType = fragmentView.FindAssociatedViewModelType(fragment.Activity.GetType());
var view = fragmentView as IMvxView;
var cache = Mvx.Resolve<IMvxMultipleViewModelCache>();
var cached = cache.GetAndClear(viewModelType, fragmentView.UniqueImmutableCacheTag);
view.OnViewCreate(() => cached ?? LoadViewModel(fragmentView, bundle, fragment.Activity.GetType(), request));
}
示例4: Load
public virtual IMvxViewModel Load(Type viewModelType,
IMvxBundle parameterValues,
IMvxBundle savedState)
{
IMvxViewModel viewModel;
try
{
viewModel = (IMvxViewModel)Mvx.IocConstruct(viewModelType);
}
catch (Exception exception)
{
throw exception.MvxWrap("Problem creating viewModel of type {0}", viewModelType.Name);
}
try
{
CallCustomInitMethods(viewModel, parameterValues);
if (savedState != null)
{
CallReloadStateMethods(viewModel, savedState);
}
viewModel.Start();
}
catch (Exception exception)
{
throw exception.MvxWrap("Problem initialising viewModel of type {0}", viewModelType.Name);
}
return viewModel;
}
示例5: LoadViewModel
// private static IMvxBundle GetSavedStateFromBundle(Bundle bundle)
// {
// if (bundle == null)
// return null;
//
// IMvxSavedStateConverter converter;
// if (!Mvx.TryResolve<IMvxSavedStateConverter>(out converter))
// {
// MvxTrace.Trace("No saved state converter available - this is OK if seen during start");
// return null;
// }
// var savedState = converter.Read(bundle);
// return savedState;
// }
private static IMvxViewModel LoadViewModel(this IMvxUnityView unityView, IMvxBundle savedState = null)
{
#warning NullViewModel needed?
// how to do N
//if (typeof (TViewModel) == typeof (MvxNullViewModel))
// return new MvxNullViewModel() as TViewModel;
if (unityView.Request == null)
{
MvxTrace.Trace(
"Request is null - assuming this is a TabBar type situation where ViewDidLoad is called during construction... patching the request now - but watch out for problems with virtual calls during construction");
unityView.Request = Mvx.Resolve<IMvxCurrentRequest>().CurrentRequest;
}
var instanceRequest = unityView.Request as MvxViewModelInstanceRequest;
if (instanceRequest != null)
{
return instanceRequest.ViewModelInstance;
}
var loader = Mvx.Resolve<IMvxViewModelLoader>();
var viewModel = loader.LoadViewModel(unityView.Request, savedState);
if (viewModel == null)
throw new MvxException("ViewModel not loaded for " + unityView.Request.ViewModelType);
return viewModel;
}
示例6: Load
public virtual IMvxViewModel Load(Intent intent, IMvxBundle savedState, Type viewModelTypeHint)
{
if (intent == null)
{
MvxTrace.Error( "Null Intent seen when creating ViewModel");
return null;
}
if (intent.Action == Intent.ActionMain)
{
MvxTrace.Trace("Creating ViewModel for ActionMain");
var loaderService = Mvx.Resolve<IMvxViewModelLoader>();
var viewModelRequest = MvxViewModelRequest.GetDefaultRequest(viewModelTypeHint);
var viewModel = loaderService.LoadViewModel(viewModelRequest, savedState);
return viewModel;
}
if (intent.Extras == null)
{
MvxTrace.Error(
"Null Extras seen on Intent when creating ViewModel - this should not happen - have you tried to navigate to an MvvmCross View directly?");
return null;
}
IMvxViewModel mvxViewModel;
if (TryGetEmbeddedViewModel(intent, out mvxViewModel))
{
MvxTrace.Trace("Embedded ViewModel used");
return mvxViewModel;
}
MvxTrace.Trace("Loading new ViewModel from Intent with Extras");
return CreateViewModelFromIntent(intent, savedState);
}
示例7: Reload
public virtual IMvxViewModel Reload(IMvxViewModel viewModel,
IMvxBundle parameterValues,
IMvxBundle savedState)
{
RunViewModelLifecycle(viewModel, parameterValues, savedState);
return viewModel;
}
示例8: GetDeviceFromBundle
protected IDevice GetDeviceFromBundle(IMvxBundle parameters)
{
if (!parameters.Data.ContainsKey(DeviceIdKey)) return null;
var deviceId = parameters.Data[DeviceIdKey];
return Adapter.ConnectedDevices.FirstOrDefault(d => d.Id.ToString().Equals(deviceId));
}
示例9: InitFromBundle
protected override void InitFromBundle(IMvxBundle parameters)
{
// TODO get and cast incomming bundle to the parameter passed from FirstViewModel
// details here
// https://github.com/MvvmCross/MvvmCross/wiki/ViewModel--to-ViewModel-navigation
base.InitFromBundle(parameters);
}
示例10: InitFromBundle
protected override void InitFromBundle(IMvxBundle parameters)
{
string value;
if (parameters.Data != null && parameters.Data.TryGetValue("StationId", out value))
{
_followStation = _followService.GetFollowStation(value);
}
}
示例11: InitFromBundle
protected override void InitFromBundle(IMvxBundle parameters)
{
var nutritionTable = parameters.Read<NutritionTable>();
Score = NutritionService.GetScore(nutritionTable);
Balance = Mvx.Create<BalanceViewModel>();
Balance.Update(nutritionTable);
}
示例12: MvxViewModelRequest
public MvxViewModelRequest(Type viewModelType,
IMvxBundle parameterBundle,
IMvxBundle presentationBundle,
MvxRequestedBy requestedBy)
{
ViewModelType = viewModelType;
ParameterValues = parameterBundle.SafeGetData();
PresentationValues = presentationBundle.SafeGetData();
RequestedBy = requestedBy;
}
示例13: Bind
public void Bind(IMvxViewModel viewModel, IMvxBundle parameterValues = null, IMvxBundle savedState = null)
{
var controllerAware = viewModel as IControllerAware;
if (controllerAware != null)
{
var viewModelType = viewModel.GetType();
var name = viewModelType.FullName.Replace("ViewModel", "Controller");
Type controllerType = GetControllerTypeForViewModel(_getCreateableTypes(), viewModel);
if (controllerType == null)
{
throw new ArgumentException(string.Format("Controller for view model {0} cannot be found.", viewModelType));
}
try
{
var controller = (IMvxController) Mvx.IocConstruct(controllerType);
controllerAware.AttachController(controller);
var viewModelAware = controller as IViewModelAware;
if (viewModelAware != null)
{
viewModelAware.AttachViewModel(viewModel);
}
try
{
CallControllerInitMethods(controller, parameterValues);
if (savedState != null)
{
CallReloadStateMethods(controller, savedState);
}
}
catch (Exception ex)
{
MvxTrace.Error("MvxControllers: Problem initialising controller of type {0} - problem {1}",
controllerType.Name, ex.ToLongString());
throw;
}
controller.WaitForInitialize();
}
catch (Exception ex)
{
MvxTrace.Error("MvxControllers: Problem creating controller of type {0} - problem {1}",
controllerType,
ex.ToLongString());
throw;
}
}
}
示例14: LoadViewModel
public IMvxViewModel LoadViewModel(MvxViewModelRequest request, IMvxBundle savedState)
{
if (request.ViewModelType == typeof (MvxNullViewModel))
{
return new MvxNullViewModel();
}
var viewModelLocator = FindViewModelLocator(request);
return LoadViewModel(request, savedState, viewModelLocator);
}
示例15: InitFromBundle
protected override async void InitFromBundle(IMvxBundle parameters)
{
base.InitFromBundle (parameters);
// TODO: heavy loading here
Loading = "Loading...";
Mvx.Trace (MvxTraceLevel.Diagnostic, "Before delay... instance id: {0:X}", this.GetHashCode());
await Task.Delay (3000);
Loading = null;
Mvx.Trace (MvxTraceLevel.Diagnostic, "After delay...");
}