Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenariosView.cs =================================================================== diff -u -r3b178988c0bf39ea4df9c3e70ec9f533a4c8edc2 -rc216977d4793abacb072a2e1bcd059df9d91b4c4 --- Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenariosView.cs (.../ScenariosView.cs) (revision 3b178988c0bf39ea4df9c3e70ec9f533a4c8edc2) +++ Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenariosView.cs (.../ScenariosView.cs) (revision c216977d4793abacb072a2e1bcd059df9d91b4c4) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2019. All rights reserved. +// Copyright (C) Stichting Deltares 2019. All rights reserved. // // This file is part of Riskeer. // @@ -43,6 +43,7 @@ private readonly IFailureMechanism failureMechanism; private readonly Observer failureMechanismObserver; + private RecursiveObserver calculationGroupObserver; /// /// Creates a new instance of . @@ -74,6 +75,11 @@ Observable = failureMechanism }; + calculationGroupObserver = new RecursiveObserver(UpdateDataGridViewDataSource, pcg => pcg.Children) + { + Observable = calculationGroup + }; + InitializeComponent(); InitializeListBox(); @@ -98,6 +104,7 @@ protected override void Dispose(bool disposing) { failureMechanismObserver.Dispose(); + calculationGroupObserver.Dispose(); if (disposing) { Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenariosViewTest.cs =================================================================== diff -u -r3b178988c0bf39ea4df9c3e70ec9f533a4c8edc2 -rc216977d4793abacb072a2e1bcd059df9d91b4c4 --- Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenariosViewTest.cs (.../ScenariosViewTest.cs) (revision 3b178988c0bf39ea4df9c3e70ec9f533a4c8edc2) +++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenariosViewTest.cs (.../ScenariosViewTest.cs) (revision c216977d4793abacb072a2e1bcd059df9d91b4c4) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2019. All rights reserved. +// Copyright (C) Stichting Deltares 2019. All rights reserved. // // This file is part of Riskeer. // @@ -219,7 +219,7 @@ var failureMechanism = new TestFailureMechanism(); ShowScenariosView(new CalculationGroup(), failureMechanism); - var listBox = (ListBox)new ControlTester("listBox").TheObject; + var listBox = (ListBox) new ControlTester("listBox").TheObject; // Precondition CollectionAssert.IsEmpty(listBox.Items); @@ -264,7 +264,7 @@ var failureMechanism = new TestFailureMechanism(); ShowFullyConfiguredScenarioView(new CalculationGroup(), failureMechanism); - var dataGridView = (DataGridView)new ControlTester("dataGridView").TheObject; + var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; TestScenarioRow[] sectionResultRows = dataGridView.Rows.Cast() .Select(r => r.DataBoundItem) @@ -283,14 +283,33 @@ CollectionAssert.AreNotEquivalent(sectionResultRows, updatedRows); } - // Call - dataGridView.Rows[0].Cells[contributionColumnIndex].Value = (RoundedDouble) newValue; + [Test] + public void GivenScenarioView_WhenCalculationGroupNotifiesObserver_ThenDataGridViewUpdated() + { + // Given + var calculationGroup = new CalculationGroup(); + ShowFullyConfiguredScenarioView(calculationGroup, new TestFailureMechanism()); - // Assert - Assert.IsEmpty(dataGridView.Rows[0].ErrorText); + var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + + TestScenarioRow[] sectionResultRows = dataGridView.Rows.Cast() + .Select(r => r.DataBoundItem) + .Cast() + .ToArray(); + + // When + calculationGroup.NotifyObservers(); + + // Then + TestScenarioRow[] updatedRows = dataGridView.Rows.Cast() + .Select(r => r.DataBoundItem) + .Cast() + .ToArray(); + + CollectionAssert.AreNotEquivalent(sectionResultRows, updatedRows); } - private TestScenariosView ShowFullyConfiguredScenarioView(CalculationGroup calculationGroup, IFailureMechanism failureMechanism) + private void ShowFullyConfiguredScenarioView(CalculationGroup calculationGroup, IFailureMechanism failureMechanism) { FailureMechanismTestHelper.SetSections(failureMechanism, new[] { @@ -319,17 +338,15 @@ } }); - return ShowScenariosView(calculationGroup, failureMechanism); + ShowScenariosView(calculationGroup, failureMechanism); } - private TestScenariosView ShowScenariosView(CalculationGroup calculationGroup, IFailureMechanism failureMechanism) + private void ShowScenariosView(CalculationGroup calculationGroup, IFailureMechanism failureMechanism) { var scenariosView = new TestScenariosView(calculationGroup, failureMechanism); testForm.Controls.Add(scenariosView); testForm.Show(); - - return scenariosView; } private class TestScenariosView : ScenariosView