Browse Source

Fixed to binding for assignment employee in Calendar

Kenric Nugteren 1 month ago
parent
commit
9843fd7db3

+ 6 - 7
prs.desktop/Components/Calendar/Appointments/AssignmentAppointment.cs

@@ -13,7 +13,7 @@ using InABox.WPF;
 
 namespace PRSDesktop
 {
-    public class AssignmentAppointment : CalendarAppointment<Assignment>, INotifyPropertyChanged
+    public class AssignmentAppointment : CalendarAppointment<Assignment>
     {
         public CalendarAssignmentType AssignmentType { get; }
 
@@ -90,13 +90,12 @@ namespace PRSDesktop
             {
                 OnPropertyChanged(nameof(Date));
             }
+            else if(e.PropertyName == $"{nameof(Assignment.EmployeeLink)}.{nameof(Employee.ID)}")
+            {
+                EmployeeChanged?.Invoke(this, new());
+            }
         }
 
-        public event PropertyChangedEventHandler? PropertyChanged;
-
-        private void OnPropertyChanged([CallerMemberName] string? propertyName = null)
-        {
-            PropertyChanged?.Invoke(this, new(propertyName));
-        }
+        public event EventHandler<EventArgs>? EmployeeChanged;
     }
 }

+ 21 - 3
prs.desktop/Components/Calendar/Appointments/CalendarAppointment.cs

@@ -1,5 +1,7 @@
 using System;
 using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using Comal.Classes;
@@ -26,7 +28,7 @@ namespace PRSDesktop
         BitmapImage? Image { get; }
         object Model { get; }
 
-        Employee Employee { get; }
+        Employee? Employee { get; }
 
         TimeSpan StartTime { get; }
         TimeSpan EndTime { get; }
@@ -41,10 +43,19 @@ namespace PRSDesktop
     }
     
     [DoNotNotify]
-    public abstract class CalendarAppointment<T> : ICalendarAppointment<T>
+    public abstract class CalendarAppointment<T> : ICalendarAppointment<T>, INotifyPropertyChanged
         where T : notnull
     {
-        public Employee Employee { get; set; }
+        private Employee? _employee;
+        public Employee? Employee
+        {
+            get => _employee;
+            set
+            {
+                _employee = value;
+                OnPropertyChanged();
+            }
+        }
 
         public BitmapImage? Image { get; set; }
 
@@ -74,6 +85,13 @@ namespace PRSDesktop
             Background = new SolidColorBrush(c2);
             Foreground = new SolidColorBrush(ImageUtils.GetForegroundColor(c2));
         }
+
+        public event PropertyChangedEventHandler? PropertyChanged;
+
+        protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
+        {
+            PropertyChanged?.Invoke(this, new(propertyName));
+        }
     }
     
     public class CalendarAppointments : ScheduleAppointmentCollection //ObservableCollection<ICalendarAppointment> { }}

+ 4 - 0
prs.desktop/Components/Calendar/Calendar.xaml.cs

@@ -1034,6 +1034,10 @@ namespace PRSDesktop
             if (employee is null) return;
 
             var model = new AssignmentAppointment(assignment, employee, AssignmentType);
+            model.EmployeeChanged += (o, e) =>
+            {
+                model.Employee = _employees.FirstOrDefault(x => x.ID == assignment.EmployeeLink.ID);
+            };
             appointments.Add(model);
         }