Hi,
I'm using your Prism add-on is in your codeplex site.
The problem is when I close a document window, this document window is still present in the Views of the DockSite region.
I tried to use your advice (in http://www.actiprosoftware.com/community/thread/20350/collectionchanged-event-of-the-iviewscollecti#101275), I wrote this:
protected override void OnAttach() {
IRegion region = this.Region;
if (region != null)
region.ActiveViews.CollectionChanged += this.OnRegionActiveViewsCollectionChanged;
DockSite dockSite = this.hostControl;
if (dockSite != null) {
dockSite.WindowClosed += this.OnDockSiteWindowClosed;
dockSite.WindowActivated += this.OnDockSiteWindowActivated;
dockSite.WindowDeactivated += this.OnDockSiteWindowDeactivated;
dockSite.WindowRegistered += this.OnDockSiteWindowRegistered;
}
}
private void OnDockSiteWindowClosed(object sender, DockingWindowEventArgs e) {
DockingWindow dockingWindow = e.Window;
if (dockingWindow == null)
return;
IRegion region = this.Region;
if (region == null)
return;
if (region.ActiveViews.Contains(dockingWindow))
region.Deactivate(dockingWindow);
else if (region.ActiveViews.Contains(dockingWindow.DataContext))
region.Deactivate(dockingWindow.DataContext);
if (region.Views.Contains(dockingWindow))
region.Remove(dockingWindow);
else if (region.Views.Contains(dockingWindow.DataContext))
region.Remove(dockingWindow.DataContext);
}
This solution is working as expected, except when I load a layout, an InvalidOperationException is thrown.
System.InvalidOperationException occurred
Message=Collection was modified; enumeration operation may not execute.
Source=mscorlib
StackTrace:
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
at ActiproSoftware.Windows.Controls.Docking.DockSite.#fu(#ki #4j)
at ActiproSoftware.Windows.Controls.Docking.Serialization.DockSiteLayoutSerializer.#Lr(DockSite #QOd, XmlDockSiteLayout #1Ef)
at ActiproSoftware.Windows.Controls.Docking.Serialization.DockSiteLayoutSerializer.ApplyTo(DockSite obj)
at ActiproSoftware.Windows.Serialization.XmlSerializerBase`2.LoadFromStream(Stream stream, TObj obj)
at SRS.Services.DockService.<>c__DisplayClass5.<LoadDefaultLayout>b__1() in C:\ccm_user\ccm_wa\win_db2012\SRS\src\Services\DockService.cs:line 304
InnerException: