void ResetMonthesRange(bool from) { if (from) //для начального месяца { if (!App.AvailableMonthes.ContainsKey(ToYear)) { return; } //получаем список всех доступных месяцев на выбранный год var monthes = App.AvailableMonthes[ToYear]; //если выбран один год, то исключаем те месяцы, что находятся за выбранным начальным ToMonthes = FromYear == ToYear?monthes.Where(m => m >= FromMonth) : monthes; if (ToMonthIndex >= 0) { //пересчитываем индекс для выбранного месяца, т.к. изменили коллекцию ToMonthIndex = ToMonthes.IndexOf(ToMonth); } } else //для конечного месяца { if (!App.AvailableMonthes.ContainsKey(FromYear)) { return; } //получаем список всех доступных месяцев на выбранный год var monthes = App.AvailableMonthes[FromYear]; //если выбран один год, то исключаем те месяцы, что находятся за выбранным начальным FromMonthes = FromYear == ToYear?monthes.Where(m => m <= ToMonth) : monthes; if (FromMonthIndex >= 0) { //пересчитываем индекс для выбранного месяца, т.к. изменили коллекцию FromMonthIndex = FromMonthes.IndexOf(FromMonth); } } }
/// <summary> /// Перевыбор индекса у месяца при смене года (в новом году каких-то месяцев в БД может не быть, следовательно коллекция и индексы изменятся) /// </summary> void RefreshSelectedIndex(Period p) { if (FromMonth == null || ToMonth == null) //если месяц не проставлен по каким-то причинам { if (FromMonthIndex >= 0) { FromMonthIndex = -1; //ставим отрицательное значение } } else { //проверка, что индекс не равен текущему //(предотвращение рекурсии, т.к. при изменении индекса вызывается соответствующее изменение месяца) //и простановка индекса ткеущего выбранного месяца if (p == Period.From) { var fromMonthIndex = FromMonth.Index; var newIndex = FromMonthes.IndexOf(FromMonth, (m) => m.Index == fromMonthIndex); if (newIndex != FromMonthIndex) { FromMonthIndex = newIndex; } } else if (p == Period.To) { var toMonthIndex = ToMonth.Index; var newIndex = ToMonthes.IndexOf(ToMonth, (m) => m.Index == toMonthIndex); if (newIndex != ToMonthIndex) { ToMonthIndex = newIndex; } } } }