Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Views/DuneLocationsView.cs =================================================================== diff -u -r3b8956569af566bb85af32fedceff955e064e9c3 -r8b1f55193a7e6565f7e837bcf67f77c60eacf94b --- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Views/DuneLocationsView.cs (.../DuneLocationsView.cs) (revision 3b8956569af566bb85af32fedceff955e064e9c3) +++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Views/DuneLocationsView.cs (.../DuneLocationsView.cs) (revision 8b1f55193a7e6565f7e837bcf67f77c60eacf94b) @@ -37,6 +37,7 @@ /// public partial class DuneLocationsView : CalculatableView { + private readonly Observer duneLocationsObserver; private IEnumerable locations; /// @@ -45,6 +46,8 @@ public DuneLocationsView() { InitializeComponent(); + + duneLocationsObserver = new Observer(UpdateDuneLocations); } public override object Data @@ -55,8 +58,10 @@ } set { - locations = value as IEnumerable; + var data = (ObservableList) value; + locations = data; UpdateDataGridViewDataSource(); + duneLocationsObserver.Observable = data; } } @@ -65,6 +70,12 @@ /// public IAssessmentSection AssessmentSection { get; set; } + protected override void Dispose(bool disposing) + { + duneLocationsObserver.Dispose(); + base.Dispose(disposing); + } + protected override void InitializeDataGridView() { base.InitializeDataGridView(); @@ -102,5 +113,35 @@ } protected override void CalculateForSelectedRows() {} + + private void UpdateDuneLocations() + { + if (IsDataGridDataSourceChanged()) + { + UpdateDataGridViewDataSource(); + } + else + { + dataGridViewControl.RefreshDataGridView(); + } + } + + private bool IsDataGridDataSourceChanged() + { + var count = dataGridViewControl.Rows.Count; + if (count != locations.Count()) + { + return true; + } + for (int i = 0; i < count; i++) + { + var locationFromGrid = ((DuneLocationRow) dataGridViewControl.Rows[i].DataBoundItem).DuneLocation; + if (!ReferenceEquals(locationFromGrid, locations.ElementAt(i))) + { + return true; + } + } + return false; + } } } \ No newline at end of file