private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var items = e.NewValue as IEnumerable; var pagedContainer = d as PagedWidgetContainer; pagedContainer.MainGrid.Children.Clear(); pagedContainer.Pages.Clear(); var container = new WidgetContainer(); foreach (var item in items) { var itemContainer = new WidgetItemContainer(); itemContainer.DataContext = item; itemContainer.ContentTemplate = pagedContainer.ItemTemplate; itemContainer.Content = item; container.Add_WidgetItemContainer(itemContainer); } pagedContainer.Pages.Add(new PageViewModel( container)); pagedContainer.MainGrid.Children.Add(container); }
public PageViewModel(WidgetContainer container) { Container = container; }
protected void Init() { LayoutRoot.DataContext = this; Loaded += (sender, e) => OnLoaded(); SizeChanged += (sender, e) => Rearrange.Postpone(); MouseMove += (sender, e) => OnMouseMove(sender,e); XUnit = 50; YUnit = 50; Rearrange.Action = () => { var map = GetMap(); foreach (var container in Pages.Select(p => p.Container)) map.Add_New_Page(container); var combos = Pages.Select(p => p.Container).SelectMany(c => c.Widgets.Select(w => new { c, w })).ToList(); foreach (var wc in combos) { var container = wc.c; var widget = wc.w; var spot = map.FindArea((int)widget.DMaxWidth(XUnit), (int)widget.DMaxHeight(YUnit)); if (spot == null) { var toBePlaced = new WidgetContainer(); Pages.Add(new PageViewModel(toBePlaced)); MainGrid.Children.Add(toBePlaced); map.Add_New_Page(toBePlaced); spot = map.FindArea((int)widget.DMaxWidth(XUnit), (int)widget.DMaxHeight(YUnit)); } container.Remove_WidgetItemContainer(widget); ((WidgetContainer)spot.Page).Add_WidgetItemContainer(widget); Canvas.SetTop(widget, spot.Y * YUnit); Canvas.SetLeft(widget, spot.X * XUnit); map.Set_MaxBusy(widget, XUnit, YUnit, spot.Page); } foreach (var page in Pages.Where(p=> !p.Container.Widgets.Any()).ToList()) Pages.Remove(page); Pages.First().Container.Visibility = Visibility.Visible; }; }