So, I've got a static collection called Globals.POINTS and I've added a collection changed event to it so that it updates a collection called MapPageBaseClassList whenever a point is added to the static collection. It works initially and the event is fired on the first point added to the global collection but the second point added does not fire the event. It only begins working again if I back out of the page but I cannot understand why this would happen. I am new to this.
Collection changed:
Globals.POINTS.CollectionChanged += POINTS_CollectionChanged;
private void POINTS_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
var newPointsList = e.NewItems;
foreach (var item in newPointsList)
{
PointClass point = (PointClass)item;
PointControl pointControl = new PointControl(
point, Globals.EXTENTS, Globals.MapPageCanvasSize.X, Globals.MapPageCanvasSize.Y, 1, point.MapPageCanvasCenter.X, point.MapPageCanvasCenter.Y);
pointControl.ScalePoint(currentPointScale);
pointControl.PropertyChanged += CanvasPropertyChanged;
Canvas.SetLeft(pointControl, pointControl.Left);
Canvas.SetTop(pointControl, pointControl.Top);
Globals.PointControlList.Add(pointControl);
Globals.MapPageBaseClassList.Insert(0, pointControl);
MapPageBaseClassList = Globals.MapPageBaseClassList;
}
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
var deletedPointsList = e.OldItems;
foreach (var item in deletedPointsList)
{
PointClass point = (PointClass)item;
var pointControl = MapPageBaseClassList.OfType<PointControl>().FirstOrDefault(x => x.PointName == point.Name);
Globals.PointControlList.Remove(pointControl);
Globals.MapPageBaseClassList.Remove(pointControl);
MapPageBaseClassList = Globals.MapPageBaseClassList;
}
}
if (e.Action == NotifyCollectionChangedAction.Reset)
{
Globals.PointControlList.Clear();
Globals.MapPageBaseClassList.Clear();
MapPageBaseClassList = Globals.MapPageBaseClassList;
}
}
Here's where I add to the global collection:
foreach (var point in highlightedPoints)
{
CanvasLayer canvasLayer;
if (LayerCBox.SelectedIndex == 0)
{
canvasLayer = GetNewCanvasLayer();
}
else
{
canvasLayer = Globals.LAYER_LIST.FirstOrDefault(x => x.Name == LayerCBox.Text);
}
var pointClass = ValidatePointInfo(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text, canvasLayer);
if (pointClass is null)
{
return;
}
else
{
TextBox1.Background = Brushes.White;
TextBox2.Background = Brushes.White;
TextBox3.Background = Brushes.White;
TextBox4.Background = Brushes.White;
}
point.Color = "Transparent";
Globals.POINTS.Add(pointClass);
Globals.SortPoints();
Globals.SaveGlobals();
}
highlightedPoints.Clear();
}
Here's where I've defined the global variable, if that is of any help:
public static ObservableCollection<PointClass> POINTS
{
get { return points; }
set
{
points = value;
OnStaticPropertyChanged(nameof(POINTS));
}
}
I've confirmed that the point is added to the list but the event isn't triggered on the second add for some reason and I cannot begin to understand why.