Skip Navigation LinksHome > View Post

Reason 8. Interop

Earlier I introduced a series of posts entitled 10 reasons to consider WPF for your next desktop application. If you haven't read the intro yet, better head on back and read it first.

Other titles I considered for this particular post were:

Reason 8. What!? no datagrid?

or

Reason 8. 1 reason why you should consider WPF for your existing desktop applications.

So let's get started.

What!? No datagrid?

It is a well-known fact that WPF doesn't ship with a built-in DataGrid. Actually, this fact is perhaps the most commonly cited reason that WPF is not suitable for Line Of Business applications. If you're a fan of the datagrid then there is no doubt that this could be a problem for you.
Personally, it wouldn't bother me in the slightest because I'm proud to state that I've never used a DataGrid in any of my Windows Forms applications. I think it's a pretty lazy way of building a UI and a usability sticking point.
So, ignoring my rant above (at your peril;), the omission of a DataGrid doesn't have to rule out WPF.

Thanks to the wonders of the WindowsFormsHost there's nothing to stop you hosting a DataGrid directly inside your WPF application (if you still think you need a DataGrid given the Awesome ListView Control provided in WPF, that is).

<Window x:Class="Reason8.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
Title="Reason8" Height="350" Width="700" >
    <DockPanel>
        <my:WindowsFormsHost Name="_windowsFormsHost" >
            <wf:DataGrid x:Name="_gridView" />
        </my:WindowsFormsHost>
    </DockPanel>
</Window>

Here's the glorious hosted DataGrid in all it's glory.

hosted Data Grid

It's even bound to my collection of books...

_gridView.DataSource = _books;

Why not have a play with the ClickOnce Reason 8 Sample and see it for yourself.

Now is a good point to note that the DataGrid isn't the only omission from the WPF control. Others include:

  • DateTimePicker
  • MaskedTextBox
  • MonthCalendar
  • PropertyGrid
These are all useful controls, especially in forms-over-data Line-of-Business applications so you really do need to think carefully before jumping on the WPF express instead of Windows Forms. This reinforces my notes of caution in the introductory post to this series: 10 reasons to consider WPF for your next desktop application.

Of course, you could plug these wholes with third party controls or even write them yourself - but that's precious project time lost.

Does it work the other way around?

Yes, there's a reason I considered calling this post: "1 reason why you should consider WPF for your existing desktop applications": You can host WPF inside of Windows Forms using the ElementHost control:

WinForm's ElementHost control

... and a screenshot to prove it:

WPF inside a Windows Form

Enough interop options to shake at a monkey's armpit.

Tags: WPF

 
Josh Post By Josh Twist
1:53 AM
20 Nov 2007

» Next Post: Powershell to test your Regexes
« Previous Post: Silverlight to get full WPF databinding honors

Comments are closed for this post.

Posted by Al @ 21 Nov 2007 7:22 AM
Josh,

Great list of reasons. I am really enjoying the series. Reason 8 is still a big deal for me. I am surprised we are not seeing more controls being released. Do you have any idea when these missing controls might make an appearance?

Looking forward to 9 and 10.

Al

Posted by Josh @ 22 Nov 2007 2:10 AM
Thanks Al,

There are a number of third party offerings (some are even offering a free datagrid for WPF!) that can fill these gaps.

Failing that, I guess you'll probably be waiting at least until vNext of WPF but I don't know for sure.

Posted by Matthew Adams @ 01 Dec 2008 3:30 AM
Al @ 21 - you might want to look at Microsoft's own offerings here:

http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=14963

© 2005 - 2014 Josh Twist - All Rights Reserved.