Tweets by @Actipro
Please take some time to learn more about us and our product offerings.
As mentioned in this previous post, we've been looking for ideas to further improve our WPF Docking/MDI product, which already is the market leader for docking tool window and MDI functionality. We've committed to working on a complete internal restructuring of the product that we will call Docking/MDI vNext. We're doing our best to keep the same general API surface, while providing even more advanced features in every area of the product. We've collected suggestions from our customers over the past several years and are working to meet them as best we can with Docking/MDI vNext.
As mentioned in the previous post, we are currently working on enhancements for the MVVM support our Docking/MDI controls provide. In today's post, we'll talk about new code being added that allows you to specify a default location for new tool windows that are opened.
As in the current version, when a tool window has already been in the dock site layout and then is closed, it leaves a breadcrumb behind so that it knows exactly where to appear when reopened later. In vNext, for tool windows that are being opened for the first time and don't yet have a breadcrumb available, default location information is now requested.
The new DockingWindow.WindowGroupName property can be set on tool windows that have an affinity. Each window in a 'group' should have the same property value. A window being opened for the first time will look for other open members of the group in the same state so that it can attach to them.
DockingWindow also has a new DefaultLocationRequestAction property that can be set to a lambda that is passed a special event args instance. The event args allows you to programmatically designate a dock target (such as a dock host or other tool window) and optional side upon which to dock. Then the new DockSite.WindowDefaultLocationRequested event fires and allows for the similar logic to be applied, but at a centralized location.
If no dock target is designated by the action or event, then the window will dock against the primary dock host using the side specified by the window's new DefaultDockSide property.
With the properties and events mentioned above, vNext now gives you full control over where brand new tool windows will open in a layout by default. These capabilities are essential for MVVM scenarios.
If you don't want to get into writing any code, simply set the WindowGroupName and DefaultDockSide properties. Or if you do wish to have more complex logic and find-grained control, use either the DefaultLocationRequestAction or WindowDefaultLocationRequested event to supply your logic. The choice is yours!
Docking/MDI vNext is currently still in mid-development stages but is progressing very well. Please contact us via email if you are an existing customer and would like to sign up as a beta tester for vNext. If you have any other suggestions for improving Docking/MDI, now is the time to get them in. We'll post more updates on our vNext improvements soon.
In the meantime, please download our current Docking/MDI control product and give it a spin.
As mentioned in the previous post, we are currently working on enhancements for the MVVM support our Docking/MDI controls provide. In today's post, I'd like to list some key updates that will improve MVVM usage.
In the current version of Docking/MDI, you are able to two-way bind to the DockingWindow.IsOpen property. When set to true, the docking window will be opened and added to the layout. Likewise, setting IsOpen to false will close the docking window and remove it from the layout.
For vNext, we're adding an IsActive property that effectively returns when DockSite.ActiveWindow is the docking window. A number of customers requested that we add this property and make it settable. If you bind to the property and set IsActive to true, it will not only open the window, but will also ensure it is activated (has focus).
The current version has a DockingWindow.State property, but it is read-only. For vNext, we are adding a setter so that your view models can bind to it. As an example, this allows you to create a new tool view model, set its State property to AutoHide, and then set IsOpen = true to effectively open the container tool window in auto-hide state.
The current version requires an attached behavior for MVVM scenarios that would watch DockSite events and open/position docking windows appropriately. With the various property and functionality enhancements we're making, this no longer is needed for common scenarios.
A next step we are going to be working on is how to specify the default location for tool windows that are created in MVVM scenarios. We want your feedback for this. Please let us know how you'd like to be able to specify that a container docking window should default dock to the right side of the dock site, or dock below another tool window, or attach to another tool window, or auto-hide to the bottom, or float at a location, etc. for MVVM scenarios. Now is the time to submit your feedback for this feature. Thanks for your help!
Our current production version of Docking/MDI fully supports the optional MVVM pattern for managing both tool and document windows. The design generally follows that of a standard ItemsControl.
We are revisiting all of this right now in our vNext implementation and want to hear from you, our customers, on what improvements or feature additions would help you out when working with MVVM-based docking windows.
If you could reply to the above questions in the comments or email our support address, it would be most welcome. Now is the time to send your feedback as we are currently working in this area. Thanks!