private void SliderOnValueChanged(object sender, SliderValueChangedEventArgs e)
        {
            if (_updatingSliders)
            {
                return;
            }

            var slider = (SliderViewModel)sender;

            IMod[] tiers = SelectedAffix.QueryModsSingleValue(slider.ValueIndex, e.NewValue)
                           .OrderBy(m => m.RequiredLevel).ToArray();
            _updatingSliders = true;
            foreach (var other in _sliders.Where(s => s != slider))
            {
                var iValue = other.ValueIndex;
                if (!SelectedAffix.QueryModsSingleValue(iValue, other.Value).Intersect(tiers).Any())
                {
                    // slider isn't inside current tier
                    Range <int> moveto = tiers[0].Stats[iValue].Range;
                    other.Value = (e.NewValue > e.OldValue) ? moveto.From : moveto.To;
                }
            }
            _updatingSliders = false;

            OnPropertyChanged("SelectedValues");

            AffixText = string.Join("/", SelectedAffix.QueryMods(SelectedValues).Select(s => $"{s.Name}").Distinct());
        }
        private void SliderOnValueChanged(object sender, SliderValueChangedEventArgs e)
        {
            if (_updatingSliders)
            {
                return;
            }

            var slider = (SliderViewModel)sender;

            ItemModTier[] tiers = SelectedAffix.QueryMod(slider.StatIndex, slider.ValueIndex, e.NewValue)
                                  .OrderBy(m => m.Name).ToArray();
            _updatingSliders = true;
            foreach (var other in _sliders.Where(s => s != slider))
            {
                var iStat  = other.StatIndex;
                var iValue = other.ValueIndex;
                if (!SelectedAffix.QueryMod(iStat, iValue, other.Value).Intersect(tiers).Any())
                {
                    // slider isn't inside current tier
                    Range <float> moveto = tiers[0].Stats[iStat].Ranges[iValue];
                    other.Value = (e.NewValue > e.OldValue) ? moveto.From : moveto.To;
                }
            }
            _updatingSliders = false;

            OnPropertyChanged("SelectedValues");

            AffixText = TiersString(Query());
        }
 private void QualitySliderOnValueChanged(object sender, SliderValueChangedEventArgs e)
 {
     RecalculateItem();
 }