private void LoadTiles() { // TODO: This method could probably be be optimized! We can probably get away without reloading everything every time. lock (this) { foreach (var child in Children) { var childButton = child as Button; if (childButton != null) { childButton.Content = null; childButton.DataContext = null; } } Children.Clear(); var actionsHost = DataContext as IHaveActions; if (actionsHost != null) { List<IViewAction> currentActions; lock (actionsHost.Actions) // Trying to do this as quickly as possible to avoid threading problems currentActions = actionsHost.Actions.OrderBy(a => a.CategoryOrder).ToList(); RemoveAllMenuKeyBindings(); foreach (var action in currentActions) { var button = new NewsroomTileButton(); button.SetResourceReference(StyleProperty, "Newsroom-Control-TileButton"); button.Command = action; var visibilityBinding = new Binding("Availability") {Source = action, Converter = new AvailabilityToVisibilityConverter()}; button.SetBinding(VisibilityProperty, visibilityBinding); var iconBinding = new Binding("PopulatedBrush") {Source = action}; button.SetBinding(NewsroomTileButton.IconProperty, iconBinding); var captionBinding = new Binding("Caption") { Source = action }; button.SetBinding(NewsroomTileButton.CaptionProperty, captionBinding); var significanceBinding = new Binding("Significance") { Source = action }; button.SetBinding(NewsroomTileButton.SignificanceProperty, significanceBinding); if (action.ActionView == null) { var realAction = action as ViewAction; if (realAction != null && !realAction.HasBrush && !realAction.HasExecuteDelegate && string.IsNullOrEmpty(action.Caption)) continue; // Not adding this since is has no brush and no execute and no caption //switch (action.Significance) //{ // case ViewActionSignificance.Highest: // var view = Controller.LoadView("CODEFrameworkStandardViewTileWideSquare"); // button.Content = view; // view.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.DoubleSquare); // break; // case ViewActionSignificance.AboveNormal: // var view2 = Controller.LoadView("CODEFrameworkStandardViewTileWide"); // button.Content = view2; // view2.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view2; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.Double); // break; // case ViewActionSignificance.Normal: // case ViewActionSignificance.BelowNormal: // var view3 = Controller.LoadView("CODEFrameworkStandardViewTileNarrow"); // button.Content = view3; // view3.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view3; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.Normal); // break; // case ViewActionSignificance.Lowest: // var view4 = Controller.LoadView("CODEFrameworkStandardViewTileTiny"); // button.Content = view4; // view4.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view4; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.Tiny); // break; //} } else { button.Content = action.ActionView; if (action.ActionView.DataContext == null) action.ActionView.DataContext = action.ActionViewModel ?? action; switch (action.Significance) { case ViewActionSignificance.Highest: SetTileWidthMode(button, TileWidthModes.DoubleSquare); break; case ViewActionSignificance.AboveNormal: SetTileWidthMode(button, TileWidthModes.Double); break; case ViewActionSignificance.Normal: case ViewActionSignificance.BelowNormal: SetTileWidthMode(button, TileWidthModes.Normal); break; case ViewActionSignificance.Lowest: SetTileWidthMode(button, TileWidthModes.Tiny); break; } } if (action.Categories.Count > 0) { SetGroupName(button, action.Categories[0].Id); SetGroupTitle(button, action.Categories[0].Caption); } else { SetGroupName(button, string.Empty); SetGroupTitle(button, string.Empty); } Children.Add(button); if (action.AccessKey != ' ') _menuKeyBindings.Add(new ViewActionMenuKeyBinding(action) {Key = action.ShortcutKey, Modifiers = action.ShortcutModifiers}); } CreateAllMenuKeyBindings(); } } }
private void LoadTiles() { // TODO: This method could probably be be optimized! We can probably get away without reloading everything every time. lock (this) { foreach (var child in Children) { var childButton = child as Button; if (childButton != null) { childButton.Content = null; childButton.DataContext = null; } } Children.Clear(); var actionsHost = DataContext as IHaveActions; if (actionsHost != null) { List <IViewAction> currentActions; lock (actionsHost.Actions) // Trying to do this as quickly as possible to avoid threading problems currentActions = actionsHost.Actions.OrderBy(a => a.CategoryOrder).ToList(); RemoveAllMenuKeyBindings(); foreach (var action in currentActions) { var button = new NewsroomTileButton(); button.SetResourceReference(StyleProperty, "Newsroom-Control-TileButton"); button.Command = action; var visibilityBinding = new Binding("Availability") { Source = action, Converter = new AvailabilityToVisibilityConverter() }; button.SetBinding(VisibilityProperty, visibilityBinding); var iconBinding = new Binding("PopulatedBrush") { Source = action }; button.SetBinding(NewsroomTileButton.IconProperty, iconBinding); var captionBinding = new Binding("Caption") { Source = action }; button.SetBinding(NewsroomTileButton.CaptionProperty, captionBinding); var significanceBinding = new Binding("Significance") { Source = action }; button.SetBinding(NewsroomTileButton.SignificanceProperty, significanceBinding); if (action.ActionView == null) { var realAction = action as ViewAction; if (realAction != null && !realAction.HasBrush && !realAction.HasExecuteDelegate && string.IsNullOrEmpty(action.Caption)) { continue; // Not adding this since is has no brush and no execute and no caption } //switch (action.Significance) //{ // case ViewActionSignificance.Highest: // var view = Controller.LoadView("CODEFrameworkStandardViewTileWideSquare"); // button.Content = view; // view.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.DoubleSquare); // break; // case ViewActionSignificance.AboveNormal: // var view2 = Controller.LoadView("CODEFrameworkStandardViewTileWide"); // button.Content = view2; // view2.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view2; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.Double); // break; // case ViewActionSignificance.Normal: // case ViewActionSignificance.BelowNormal: // var view3 = Controller.LoadView("CODEFrameworkStandardViewTileNarrow"); // button.Content = view3; // view3.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view3; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.Normal); // break; // case ViewActionSignificance.Lowest: // var view4 = Controller.LoadView("CODEFrameworkStandardViewTileTiny"); // button.Content = view4; // view4.DataContext = action.ActionViewModel ?? action; // //action.ActionView = view4; // No need to re-load this later... // SetTileWidthMode(button, TileWidthModes.Tiny); // break; //} } else { button.Content = action.ActionView; if (action.ActionView.DataContext == null) { action.ActionView.DataContext = action.ActionViewModel ?? action; } switch (action.Significance) { case ViewActionSignificance.Highest: SetTileWidthMode(button, TileWidthModes.DoubleSquare); break; case ViewActionSignificance.AboveNormal: SetTileWidthMode(button, TileWidthModes.Double); break; case ViewActionSignificance.Normal: case ViewActionSignificance.BelowNormal: SetTileWidthMode(button, TileWidthModes.Normal); break; case ViewActionSignificance.Lowest: SetTileWidthMode(button, TileWidthModes.Tiny); break; } } if (action.Categories.Count > 0) { SetGroupName(button, action.Categories[0].Id); SetGroupTitle(button, action.Categories[0].Caption); } else { SetGroupName(button, string.Empty); SetGroupTitle(button, string.Empty); } Children.Add(button); if (action.AccessKey != ' ') { _menuKeyBindings.Add(new ViewActionMenuKeyBinding(action) { Key = action.ShortcutKey, Modifiers = action.ShortcutModifiers }); } } CreateAllMenuKeyBindings(); } } }