Explorar el Código

Merge pull request #2787 from MarchingCube/calendar-event-spam

Do not spam with collection changed events in Calendar.
Steven Kirk hace 6 años
padre
commit
7c0b35b65e
Se han modificado 1 ficheros con 14 adiciones y 3 borrados
  1. 14 3
      src/Avalonia.Controls/Calendar/CalendarItem.cs

+ 14 - 3
src/Avalonia.Controls/Calendar/CalendarItem.cs

@@ -4,6 +4,7 @@
 // All other rights reserved.
 
 using System;
+using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
 using Avalonia.Data;
@@ -193,6 +194,9 @@ namespace Avalonia.Controls.Primitives
         {
             if (MonthView != null)
             {
+                var childCount = Calendar.RowsPerMonth + Calendar.RowsPerMonth * Calendar.ColumnsPerMonth;
+                var children = new List<IControl>(childCount);
+
                 for (int i = 0; i < Calendar.RowsPerMonth; i++)
                 {
                     if (_dayTitleTemplate != null)
@@ -201,7 +205,7 @@ namespace Avalonia.Controls.Primitives
                         cell.DataContext = string.Empty;
                         cell.SetValue(Grid.RowProperty, 0);
                         cell.SetValue(Grid.ColumnProperty, i);
-                        MonthView.Children.Add(cell);
+                        children.Add(cell);
                     }
                 }
 
@@ -222,13 +226,18 @@ namespace Avalonia.Controls.Primitives
                         cell.PointerEnter += Cell_MouseEnter;
                         cell.PointerLeave += Cell_MouseLeave;
                         cell.Click += Cell_Click;
-                        MonthView.Children.Add(cell);
+                        children.Add(cell);
                     }
                 }
+                
+                MonthView.Children.AddRange(children);
             }
 
             if (YearView != null)
             {
+                var childCount = Calendar.RowsPerYear * Calendar.ColumnsPerYear;
+                var children = new List<IControl>(childCount);
+
                 CalendarButton month;
                 for (int i = 0; i < Calendar.RowsPerYear; i++)
                 {
@@ -246,9 +255,11 @@ namespace Avalonia.Controls.Primitives
                         month.CalendarLeftMouseButtonUp += Month_CalendarButtonMouseUp;
                         month.PointerEnter += Month_MouseEnter;
                         month.PointerLeave += Month_MouseLeave;
-                        YearView.Children.Add(month);
+                        children.Add(month);
                     }
                 }
+
+                YearView.Children.AddRange(children);
             }
         }