private static void DeckChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue != null) { DataModel.Deck deck = e.NewValue as DataModel.Deck; DeckLastGamesIndicator control = d as DeckLastGamesIndicator; deck.PropertyChanged += delegate { RefreshLastGamesIndicator(deck, control); }; RefreshLastGamesIndicator(deck, control); } }
private static void NumberOfColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DeckLastGamesIndicator control = d as DeckLastGamesIndicator; control.grid.ColumnDefinitions.Clear(); for (int i = 0; i < (int)e.NewValue; i++) { control.grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); } DataModel.Deck deck = d.GetValue(DeckProperty) as DataModel.Deck; if (deck != null) { RefreshLastGamesIndicator(deck, control); } }
private static void RefreshLastGamesIndicator(DataModel.Deck deck, DeckLastGamesIndicator control) { IEnumerable <bool> wins = deck.DeckGames .OrderByDescending(g => g.Date) .Take(control.GamesCount) .Reverse() .Select(g => g.Outcome == DataModel.Enums.GameOutcome.Victory) .ToList(); int col = 0; control.grid.Children.Clear(); foreach (bool win in wins) { Rectangle r = new Rectangle(); r.Fill = win ? Brushes.SeaGreen : Brushes.Brown; r.SetValue(Grid.ColumnProperty, col++); r.Height = LAST_GAME_INDICATOR_HEIGHT; r.Margin = new Thickness(LAST_GAME_INDICATOR_MARGIN, 0, LAST_GAME_INDICATOR_MARGIN, 0); control.grid.Children.Add(r); } }