public Blueprint(ILanguage language, string type, string blueprintName, int grade, IReadOnlyCollection <BlueprintIngredient> ingredients, IReadOnlyCollection <string> engineers) { this.language = language; Type = type; BlueprintName = blueprintName; Grade = grade; Engineers = engineers; Ingredients = ingredients; SetupSearchableContent(); language.PropertyChanged += (o, e) => SetupSearchableContent(); foreach (var ingredient in Ingredients) { ingredient.Entry.PropertyChanged += (o, e) => { if (e.PropertyName != "Count") { return; } var extended = (PropertyChangedExtendedEventArgs <int>)e; var progressBefore = ComputeProgress(i => Math.Max(0, i.Entry.Data.Name == ingredient.Entry.Data.Name ? extended.OldValue : i.Entry.Count)); if (Math.Abs(progressBefore - Progress) > 0.1) { OnPropertyChanged(nameof(Progress)); } var canCraftCountBefore = ComputeCraftCount(i => Math.Max(0, i.Entry.Data.Name == ingredient.Entry.Data.Name ? extended.OldValue : i.Entry.Count)); if (canCraftCountBefore != CanCraftCount) { OnPropertyChanged(nameof(CanCraftCount)); if (Favorite && canCraftCountBefore == 0 && CanCraftCount > 0) { FavoriteAvailable?.Invoke(this, EventArgs.Empty); } } }; } }
public Blueprint(string type, string name, int grade, IReadOnlyCollection <BlueprintIngredient> ingredients, IReadOnlyCollection <string> engineers) { Type = type; Name = name; Grade = grade; Engineers = engineers; Ingredients = ingredients; foreach (var ingredient in Ingredients) { ingredient.Entry.PropertyChanged += (o, e) => { var extended = (PropertyChangedExtendedEventArgs <int>)e; var progressBefore = ComputeProgress(i => i.Entry.Data.Name == ingredient.Entry.Data.Name ? extended.OldValue : i.Entry.Count); if (Math.Abs(progressBefore - Progress) > 0.1) { OnPropertyChanged(nameof(Progress)); } var canCraftCountBefore = ComputeCraftCount(i => i.Entry.Data.Name == ingredient.Entry.Data.Name ? extended.OldValue : i.Entry.Count); if (canCraftCountBefore != CanCraftCount) { OnPropertyChanged(nameof(CanCraftCount)); if (Favorite && canCraftCountBefore == 0 && CanCraftCount > 0) { FavoriteAvailable?.Invoke(this, EventArgs.Empty); } } }; } }