public override void AddCards(PlayerViewModel viewModel, AddCardsCommand arg) { base.AddCards(viewModel, arg); foreach (CardInfo ci in arg.CardInfos) { CardViewModel card = MVVMKernelExtensions.CreateViewModel <CardViewModel> (); card.Info = ci; if (viewModel.IsSelf) { card.Face = CardFace.FaceUp; } else { card.Face = CardFace.FaceDown; } card.Place = CardPlace.Floor; card.OwnerActorId = viewModel.ActorId; viewModel.HandCards.Add(card); } viewModel.ExecuteReorder(); }
public static T Clone <T>(this T viewModel, bool includeCollections = true) where T : ViewModel { T clone = MVVMKernelExtensions.CreateViewModel <T>(); foreach (var prop in viewModel.Properties) { var sourceP = prop.Property; var cloneP = clone[sourceP.PropertyName].Property; if (!prop.IsCollectionProperty && !prop.IsComputed && !(prop.Property is StateMachine)) //regular property { cloneP.ObjectValue = sourceP.ObjectValue; } else if (prop.IsComputed || prop.Property is StateMachine) //computed stuff { //Those will be assigned automatically } else if (prop.IsCollectionProperty && includeCollections) //collections { var sourceList = sourceP as IList; var cloneList = cloneP as IList; for (int i = 0; i < sourceList.Count; i++) { cloneList.Add(sourceList[i]); } } } return(clone); }
/// <summary> /// This is method is called by each view in order to get it's view-model as well as place it in /// the SceneContext if the "Save & Load" option is checked in it's inspector /// </summary> /// <param name="viewBase">The view that is requesting it's view-model.</param> /// <returns>A new view model or the view-model with the identifier specified found in the scene context.</returns> public static ViewModel FetchViewModel(ViewBase viewBase) { if (viewBase.ViewModelObject != null) { return(viewBase.ViewModelObject); } // Attempt to resolve it by the identifier //var contextViewModel = uFrameMVVMKernel.Container.Resolve<ViewModel>(viewBase.Identifier); // It now only registers under the viewmodeltype to allow multip different view-models with the same identifier var contextViewModel = uFrameKernel.Container.Resolve(viewBase.ViewModelType, viewBase.Identifier) as ViewModel; // If it doesn't resolve by the identifier we need to create it if (contextViewModel == null) { // Either use the controller to create it or create it ourselves contextViewModel = MVVMKernelExtensions.CreateViewModel(viewBase.ViewModelType, viewBase.Identifier); // Register it, this is usually when a non registered element is treated like a single-instance anways uFrameKernel.Container.RegisterInstance(viewBase.ViewModelType, contextViewModel, string.IsNullOrEmpty(viewBase.Identifier) ? null : viewBase.Identifier); // Register it under the generic view-model type //uFrameMVVMKernel.Container.RegisterInstance<ViewModel>(contextViewModel, viewBase.Identifier); //Will be invoked in the controller. //uFrameKernel.EventAggregator.Publish(new ViewModelCreatedEvent() //{ // ViewModel = contextViewModel //}); } // If we found a view-model if (contextViewModel != null) { // If the view needs to be overriden it will initialize with the inspector values if (viewBase.OverrideViewModel) { viewBase.InitializeData(contextViewModel); } return(viewBase.ViewModelObject = contextViewModel); } return(contextViewModel); }
public override void RefreshRoom(RoomPanelViewModel viewModel) { base.RefreshRoom(viewModel); viewModel.PlayerItems.Clear(); Dictionary <int, Player> playerDic = Network.Client.CurrentRoom.Players; playerDic.OrderBy(kv => kv.Value.ID).ToList() .ForEach(kv => { PlayerItemViewModel vm = MVVMKernelExtensions.CreateViewModel <PlayerItemViewModel> (); vm.Player = kv.Value; vm.ActerId = kv.Value.ID; vm.Name = kv.Value.Name; vm.IsLocal = kv.Value.IsLocal; viewModel.PlayerItems.Add(vm); }); }
object ITypeResolver.CreateInstance(string name, string identifier) { var type = ((ITypeResolver)this).GetType(name); #if NETFX_CORE var isViewModel = type.GetTypeInfo().IsSubclassOf(typeof(ViewModel)); #else var isViewModel = typeof(ViewModel).IsAssignableFrom(type); #endif if (isViewModel) { var contextViewModel = Container.Resolve(type, identifier); if (contextViewModel != null) { return(contextViewModel); } return(MVVMKernelExtensions.CreateViewModel(type, identifier)); } return(null); }
public override void PlayerJoin(CoreGameRootViewModel viewModel) { base.PlayerJoin(viewModel); // 在 LBRoom 中查找 PlayerCollection 中没有的, 加入 Network.Client.CurrentRoom.Players.OrderBy(_ => _.Key).ToList().ForEach(kv => { int actorId = kv.Key; Player player = kv.Value; if (viewModel.PlayerCollection.ToList().Exists(vm => vm.ActorId == actorId) == false) { PlayerViewModel playerVM = MVVMKernelExtensions.CreateViewModel <PlayerViewModel> (); playerVM.ActorId = player.ID; playerVM.PlayerName = player.Name; playerVM.IsSelf = player.IsLocal; playerVM.PlayerRoomIdentity = player.IsMasterClient ? RoomIdentity.RoomMaster : RoomIdentity.RoomGuest; playerVM.LBPlayer = player; viewModel.PlayerCollection.Add(playerVM); } }); viewModel.ExecuteCalcPosIdAndRepos(); viewModel.ExecuteRefreshCoreGame(); }