/// <summary> /// Sets the commands, column order and event handlers. /// After this the VM is ready for operation /// </summary> /// <param name="column"></param> private void InitializeColumn(ColumnDefinitionVM column) { int nonZeroOrderColumns = ColumnDefinitions.Count(c => c.ColumnOrder > 0); if (column.ColumnOrder == 0) { column.ColumnOrder = nonZeroOrderColumns + 1; } column.RemoveCommand = new DelegateCommand((parameter) => { int order = (int)parameter; List <ColumnDefinitionVM> higherOrder = ColumnDefinitions.Where(cd => cd.ColumnOrder > order).ToList(); List <ColumnDefinitionVM> lowerOrder = ColumnDefinitions.Where(cd => cd.ColumnOrder < order).ToList(); foreach (ColumnDefinitionVM cdVM in higherOrder) { cdVM.ColumnOrder--; } ColumnDefinitions = lowerOrder.Concat(higherOrder).ToArray(); }); column.MoveLeft = MoveColumnLeft; column.MoveRight = MoveColumnRight; MoveColumnLeft.RaiseCanExecuteChanged(); MoveColumnRight.RaiseCanExecuteChanged(); }