public SocketedGemsEditingViewModel(ItemImageService itemImageService, Item itemWithSockets) { _itemWithSockets = itemWithSockets; // convert ItemDB.Gems into GemBaseViewModels AvailableGems = ItemDB.GetAllGems().Select(g => new GemBaseViewModel(itemImageService, g)).ToList(); NumberOfSockets = _itemWithSockets.BaseType.MaximumNumberOfSockets; NewSocketedGem = new SocketedGemViewModel { GemBase = AvailableGems[0], Level = 1, Quality = 0, Group = 1 }; AddGemCommand = new RelayCommand(AddGem, CanAddGem); RemoveGemCommand = new RelayCommand <SocketedGemViewModel>(RemoveGem); SocketedGemsViewSource = new CollectionViewSource { Source = _socketedGems }; SocketedGemsViewSource.SortDescriptions.Add(new SortDescription( nameof(SocketedGemViewModel.GemBase) + "." + nameof(GemBaseViewModel.Name), ListSortDirection.Ascending)); SocketedGemsViewSource.SortDescriptions.Add(new SortDescription( nameof(SocketedGemViewModel.Group), ListSortDirection.Ascending)); // convert currently socketed gem Items into SocketedGemViewModels foreach (var gem in _itemWithSockets.Gems) { var gemBase = AvailableGems.FirstOrDefault(g => g.Name == gem.Name); if (gemBase == null) { continue; } var socketedGem = new SocketedGemViewModel { GemBase = gemBase, Level = ItemDB.LevelOf(gem), Quality = ItemDB.QualityOf(gem), Group = gem.SocketGroup + 1 }; socketedGem.PropertyChanged += SocketedGemsOnPropertyChanged; _socketedGems.Add(socketedGem); } }
private void RemoveGem(SocketedGemViewModel gem) { gem.PropertyChanged -= SocketedGemsOnPropertyChanged; _socketedGems.Remove(gem); NewSocketedGem = gem; }