private void UpdateSelectors(SortableColumnSelector target = null) { if (this.Selectors == null) { this.Selectors = Enumerable.Range(0, selectorNum) .Select(_ => new SortableColumnSelector { Updated = x => this.UpdateSelectors(x), }) .ToArray(); } // nonColumn 以外で選択された列 var selectedItems = new HashSet <SortableColumn>(); SortableColumnSelector previous = null; // enabled は Selector の SelectableColumns を作り直すかどうか // target が指定されていなければ全部、指定されていればその target の次から作り直す var enabled = target == null; foreach (var selector in this.Selectors) { if (enabled) { var sortables = Columns.Where(x => !selectedItems.Contains(x)).ToList(); var current = selector.Current; if (previous != null && previous.Current == LevelColumn) { // 直前のソート列がレベルだったら、この列は次のレベルまでの経験値にしてあげる sortables.Insert(1, ExpColumn); current = ExpColumn; selector.SafeUpdate(!previous.IsAscending); } selector.SelectableColumns = sortables.ToArray(); selector.SafeUpdate(sortables.Contains(current) ? current : sortables.FirstOrDefault()); } else { enabled = selector == target; } if (selector.Current != NoneColumn) { selectedItems.Add(selector.Current); } previous = selector; } }
private void UpdateSelectors(SortableColumnSelector target = null) { if (this.Selectors == null) { this.Selectors = Enumerable.Range(0, selectorNum) .Select(_ => new SortableColumnSelector { Updated = x => this.UpdateSelectors(x), }) .ToArray(); } // nonColumn 以外で選択された列 var selectedItems = new HashSet<SortableColumn>(); SortableColumnSelector previous = null; // enabled は Selector の SelectableColumns を作り直すかどうか // target が指定されていなければ全部、指定されていればその target の次から作り直す var enabled = target == null; foreach (var selector in this.Selectors) { if (enabled) { var sortables = Columns.Where(x => !selectedItems.Contains(x)).ToList(); var current = selector.Current; if (previous != null && previous.Current == LevelColumn) { // 直前のソート列がレベルだったら、この列は次のレベルまでの経験値にしてあげる sortables.Insert(1, ExpColumn); current = ExpColumn; selector.SafeUpdate(!previous.IsAscending); } selector.SelectableColumns = sortables.ToArray(); selector.SafeUpdate(sortables.Contains(current) ? current : sortables.FirstOrDefault()); } else { enabled = selector == target; } if (selector.Current != NoneColumn) { selectedItems.Add(selector.Current); } previous = selector; } }