February 2008 - Posts - Rudi Grobler

February 2008 - Posts

xmlns?

While reviewing Blendables and NetAdvantage products, I noticed that including them in XAML required something like this

xmlns:igCA="http://infragistics.com/Chart"

So I started wondering how to map .NET namespaces to xmlns...

The answer is pretty simple, open your libraries AssemblyInfo.cs (For those of you who also didn't know where to find it, have a look under Properties in your solution explorer) and add the following:

[assembly: XmlnsDefinition("http://StockWATCH.co.za/Controls", "StockWatch.Controls")]

This basically maps my namespace StockWatch.Controls to a easier to use xmlns called http://StockWATCH.co.za/Controls!

The beauty of this approach is that you can map multiple .NET namespaces to one xmlns (Many-to-one)!

Every wondered what happens under the hood if your XAML declares the following by default?

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Well, this is all the .NET namespaces included:

  • System.Windows
  • System.Windows.Automation
  • System.Windows.Controls
  • System.Windows.Controls.Primitives
  • System.Windows.Data
  • System.Windows.Documents
  • System.Windows.Forms.Integration
  • System.Windows.Ink
  • System.Windows.Input
  • System.Windows.Media
  • System.Windows.Media.Animation
  • System.Windows.Media.Effects
  • System.Windows.Media.Imaging
  • System.Windows.Media.Media3D
  • System.Windows.Media.TextFormatting
  • System.Windows.Navigation
  • System.Windows.Shapes
kick it on DotNetKicks.com
Posted by rudi | 1 comment(s)
Filed under: ,

WPF Enhancements & Silverlight 2

I don't like to just post links to other sites but their are 2 links to Scott Guthrie's website that I just have to post about! Here is my 2c:

.NET 3.5 Client Product Roadmap

It looks like Microsoft has been listening to the feedback about WPF and thy are planning major improvements in the nearby future, here are some of my highlight:

  • New controls include DataGrid, Ribbon and Calendar/DatePicker. This will surely increase the market penetration in the LOB arena...
  • Some of the performance enhancements include 25-40% faster cold startup, moving bitmap effects to the GPU and better data editing support!!!

My personal opinion is that the current performance isn't bad... the acceleration of the bitmap effect would be great thou...

First Look at Silverlight 2

I am so looking forward to this one! I can still vaguely remember how disappointed I was when I first started with Silverlight 1.1  and realized their are NO controls! So, what can we expect in Silverlight 2.0?

  • Firstly, rich controls!!! Think WPF - Form controls, layout panels, etc...
  • The next but very important features is the capability to call cross-domain networks including REST,WS*,SOAP,POX,RSS and the list just keeps growing...

Expect loads of mash-up style silverlight applications in the future...

As soon as Silverlight is officially released (probably same time as Mix 2008), I will do a demo of how to use Silverlight and Facebook together!

Scott did not just stop there, he also includes a 8 part tutorial on how to create a Silverlight 2.0 digg client. This included a example of how to do cross-domain calls!!!

How big is this? How does 4.3MB sound?

I can't wait to see what the next 6 months hold for us...

Posted by rudi | with no comments

Is Local Lekker?

I am currently sitting at Cape Town airport and as usual our flight is delayed, so I decided to use this time to write a quick blog entry!!!

I love blogging on dotnet.org.za! I always have but some times I wonder how to generate more hits! To not reveal too much of the sites statistics, have a look at the following:

68% of the sites traffic is generated by Google. A further 21% is by referring sites and the last 11% is direct traffic! This article will focus on the 21% of the traffic by referring sites.

Which sites refer visitors here? Well, the top 4 is stumbleupon.com, codeproject.com, dotnetkicks.com and del.icio.us!

I have had 3 articles make it to the front page of dotnetkicks.com and that has made a massive difference in my sites stats for that day. Both these articles saw a 10x increase in traffic for the 1st 2 days after being published to the main page. This is all great but loads of people are arguing that not a lot of people go through the upcoming stories of these sites! So, how do you get you article on the main page? I believe that a community site should help each other? I am not suggesting kicking any article available on this site but at least kick what you like? All it takes is 5 kicks to make it to the front page. The end result of this is more visitors to dotnet.org.za!!! 1 article published on dotnetkicks.com can also easily move someone from the top 25 to the top 10! Why don't we help each other? I have to admit that I am also guilty, I always read the articles published here but hardly every kick it!!! By starting to rate content on this website, we can easily start to increase the traffic and thus reach more visitors!!! Here are my 3 articles that made it to the front page:

Also read the 2 articles about the "DotNetKicks Effect" here and the follow-up here 

Just to highlight some of the great content available on dotnet.org.za, have a look here:

Hilton

ASP/LINQ Articles

Hilton is currently number 3 on the top 10 list of content providers at dotnet.org.za. Here are some of his recent articles I liked:

Lazy Loading in LINQ: LoadWith And AssociateWith DataLoadOptions - Part 1 - LoadWith
Lazy Loading in LINQ: LoadWith And AssociateWith DataLoadOptions - Part 2 - AssociateWith And Tying Both Together
LINQ Performance - In Memory Collection
Why Use LinQ To SQL (Part 1 - Performance Considerations)?

Article with most hits
Windows Vista Losing Display Settings

Zlantan

Sharepoint Articles

Zlatan is currently number 8

DoD 5015.2 Resource Kit for SharePoint Server 2007 is finally here!!!!!!!!!!
Why your MOSS 2007 powered organisation will most likely need Extranet Collaboration Toolkit for SharePoint

Article with most hits
How to Create a SharePoint 2007 Workflow using Visual Studio 2008 Beta (Example)

clotz
Agile & Continuous Integration

clotz is currenlty number 5

Some Random Thoughts on Adopting an Agile SDLC
Continuous Integration: From Theory to Practice

Izindaba (Weekly links)
Haven't had one for a while and no WPF links :( but still worth the read!!

Izindaba #21
Izindaba #20

Article with most hits
Part 1: Continuous Integration using MSBuild, CruiseControl.NET, FxCop, NUnit, NCover + Subversion

Disclaimer: These stats are based on google analytics stats from 1 Jan 2008 to 20 Feb 2008!

PhizzPop Profiles

"The PhizzPop Design Challenge pits top interactive, Web, and design agencies against one another to push the limits of technology and creativity in a battle royale. Think Mad Max for design."

PhizzPop finals are upon us and I decided to have a look at the finalists!

PS. If you look at the problem statement, keep in mind that thy only had 3 days to build their solutions!!!

Cynergy Systems

Los Angeles winners

Problem Statement

The media industry is facing an unprecedented set of challenges today. Digital distribution, a dramatic reduction in traditional advertising, the rise of social networks such as MySpace and Facebook and other factors have all combined to force a fundamental rethinking of the entertainment industry.

Your job is to:

  • Find new ways to monetize the deep catalog of content that the consortium has. You should specifically be thinking beyond simply pay per download, subscriptions or advertising
  • Look for new ways to create fans of our content. Sites like MySpace and Facebook (among others) have shown us that social networks are powerful tools. Figure out how to exploit the principles of social networking, integrate into existing networks, or both
  • Look for ways to exploit the Long Tail. The consortium has a fantastic amount of old content that’s very valuable to many people. Figure out how to best help our users find existing content, discover other content, and share this with friends
  • Figure out the device & platform landscape. Between iTunes, the iPod, Zune, Media Center, UnBox, Xbox Live, Joost, and everything else, it’s difficult to understand the overall experience system for our users. Explore creating your own, partnering, or both

A large part of this design challenge is to make whatever experience desirable, rather than simply a forced option. Specific features and functionality should be determined by the needs of the personas (see following pages). While your solution does not need to be functional, it must simulate the experience of each of the personas you’ve chosen to solve for.

Here is their solution

AKQA

San Francisco winners

Problem Statement

Your challenge is to design an environment that allows children to share media / content as well as interact socially with each other in a child safe way. A large part of this design challenge is to make whatever experience desirable, rather than simply a forced option. Specific features and functionality should be determined by the needs of the personas (see following pages). While your solution does not need to be functional, it must simulate the experience of each of the personas you’ve chosen to solve for.

Here is their solution

  • Jamie Attfield
  • Austin Ellis
  • Matthew Law

Thirteen23

Austin winners

Problem Statement

Microcinema International is already embracing the internet and digital technology to run several successful businesses, including DVD and digital distribution, educational purchasing and licensing and B2B. But, it’s not hard to see that the future of not just exhibition but all forms of distribution are in going to be digital. Your job is to develop a solution that leverages next generation technology like WPF and Silverlight and couple it with some of the emerging trends in sharing, social media and collaboration that are transforming how we individuals purchase and consume media. Specifically, your focus is on how to help Microcinema International scale its physical Independent Exposure festival using digital technology to connect independent film enthusiasts around the world and define the FUTURE for how digital technology can enable the exhibition and distribution of independent film.  Microcinema strongly feels that the world of physical distribution will not be killed by the internet – but that the experience can be augmented by next-generation technology.  Conversely – next generation technologies coupled with a physical experience will gain more traction.

Here is their solution

Clarity Consulting

Chicago winners

Problem Statement

Your challenge is to come with recommendations for how digital technology can help Pan Am create a unique experience on the Web and within the aircraft and take into account how we connect with the world and devices that we use to do it. Your solution should demonstrate innovations in planning or preparation activities or the personal activities that occur during travel. Your general concepts should be inclusive and demonstrate ‘thinking’ if not functionality about both experiences. Your solution may use any combination of web (ASP.net, Silverlight) or application (WPF) components.

Here is their solution

CreateThe Group

New York winners

Problem Statement

M Hotels has retained your agency to design and develop their interactive hotel concierge system to provide the features, services and experience that guests expect of their brand. They have an antiquated system currently that is familiar to anyone staying in popular brand hotels. M Hotels must have a hotel concierge system that exceeds any system in market when it comes to design, usability, control, and features that enhance the lifestyle of their digitally sophisticated guests.

Posted by rudi | 1 comment(s)

Having more fun with the Wii

After my first attempt to connect the Wii and WPF I started working on improving it!

My infrared light was working but I needed something better so I opened 2 more remotes and removed their IR lights (Thy are also noticeably larger than my first IR light). I added a 120ohm resistor (To increase the brightness) for each led and reconnected it to my battery pack. Now I have 2 supper bright IR leds. To test if it work, use a standard video camera and turn off the light. You should then see them shine!

Here is a simple schematic of my lights

 

PS. please don't laugh at my over simplified schematic!

Next up is some code improvements. Because I am not doing multi touch, I decided to try and move my actual cursor. This all happens with the magic of P/Invoke!

[DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);

The only time we can call SetCursorPos is from within the callback that the WiimoteLib does when something changes.

void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args)
{
    SetCursorPos((int)(ActualWidth-(wm.WiimoteState.IRState.X1 * ActualWidth)), (int)(wm.WiimoteState.IRState.Y1 * ActualHeight));
}

One last thing to notice is that the Y axis works normally but the X axis gets inverted! This just ensures that when you move the remote to your right the mouse pointer moves to the correct side! I also created a inverted NormalizedXYConverter to ensure that the horizontal bar also moves in the correct direction!

Now that my Wii remote moves the cursor I can make buttons animate by checking if the cursor moves over them although it gets controlled by the Wii remote!

Very cool...

 [UPDATE] If you want to see a very cool use of the Wii remote, have a look at the following Coding4Fun post about using the Wii remote as drum sticks!!!

Posted by rudi | 5 comment(s)
Filed under:

Having a Wii bit of fun...

This week, I started playing with interfacing to the Wii remote. I have to give credit where credit is due:

Brian Peek wrote an excellent library to interface with the Wii remote

Johnny Chung Lee used the Wii's infrared camera to track objects (More about this later)

Rick Barraza from Cynergy started using the Wii and WPF together (Also look at Project Maestro)

Matthias Shapiro also did some excellent work getting the Wii remote and WPF to work together. He explored binding the Wii remotes status to the WPF applications data context!

Also check out the follow up article were I give the schematics of the IR lights and some code updates!

Background

The Wii remote uses standard Bluetooth (Broadcom BCM2042) to communicated with the host. It uses (abuses) the Bluetooth HID protocol. The WiimoteLib (by Brian Peek) handles all the reading and interpreting of the HID reports. All that we need to be concerned about is the WiimoteState. This contains all the statuses of the buttons, 3-axis accelerometer and the IR sensor information.

Matthias Shapiro has a excellent post on how to connect the Wii remote. Please also remember that not all Bluetooth adapters and stacks works, I will try and compile a list. I first tried to use my normal HP Bluetooth adapter but no success. Next, I installed the normal Bluetooth driver from Microsoft and it worked perfectly!

To test if everything works, try the test application that ship with the WiimoteLib (By Brian Peek) or the Wii Data Visualizer (By Matthias Shapiro).

For a IR source, I opened a normal infrared remote control and removed the IR led. I then connected the led to a AA battery holder (Available from Communica for R3). This allows me to create a infrared light source to track that runs from batteries!

Now that we have the Wii remote connected to our PC (Via Bluetooth) and we have a IR light source, we are ready to write some code.

Here is the code to setup WiimoteLib. First create a instance of Wiimote

Wiimote wm;

Next, initialise the Wiimote

wm = new Wiimote();
wm.WiimoteChanged += new WiimoteChangedEventHandler(wm_OnWiimoteChanged);
wm.Connect();
wm.SetReportType(Wiimote.InputReport.IRAccel, true);
wm.SetLEDs(false, false, false, false);

And now we are ready to look at what the Wii remote can do!

Every time something happens on the Wii remote, the wm_OnWiimoteChanged will be fired

void wm_OnWiimoteChanged(object sender, WiimoteChangedEventArgs args)
{
            WiimoteState ws = args.WiimoteState;

            //Here we can now inspect the WiimoteState object...
}
 

We can then look at the WiimoteState to see if buttons were pressed, the accelerometer's status or even what the IR camera "sees"!

BindableObject

Ok, the WPF geek inside me tells me that this might be simpler if I somehow make the state object inherit from something like a BindableObject (To implement the INotifyPropertyChanged stuff). This will have a huge performance boost because I will only update items which has changed and not everything each time the changed event fires! It will also simplify some UI stuff by allowing binding. Now I can bind to a buttons status and do animations based on its current pressed state all with the magic of dependency properties!

Instead of writing my own library, I decided to hack the WiimoteLib slightly to incorporate the BindableObject natively! I only did it for the IRState object and not even for all 4 points, I only did the first point (Assuming that the first IR light I see is the one I should use). If I have time I might just make my own WiimoteLibForWPF ;)

Now it is very simple to use the IRState object without even worrying about the WiimoteChanged event! I can now bind the WiimoteState object to my window DataContext. To simplify binding, I will only bind the IRState object and not the whole WiimoteState object!

DataContext = wm.WiimoteState.IRState;

And now its possible to bind using XAML!

<Label Content="{Binding Path=X1}" />
<Label Content="{Binding Path=Y1}" />

Very cool!!!

Next is the actual tracking. The Wii remote has a PixArt sensor in the front to assist with tracking infrared light sources. John Chung Lee had some excellent suggestions. The 1st option is to have a infrared emitting bar or array next to the Wii remote and then attaching reflective tape to your fingers to reflect the position of your hands or fingers or alternatively, have the infrared light source on your hands. Cynergy has a excellent video of how thy used this!

I opted for the more traditional way of using it. My IR source will be stationary and I am going to use the Wii remote as a "wireless mouse". This is very similar as to how it is actually used in the Wii console!

The idea is to have a very simple WPF application with 2 bars. One of the bars on the left hand side of the window and the other at the top. Each bar will indicate one axis of the "wireless mouse" with a simple line that is data bound to the status of the Wii remote.

The WiimoteLib's IRState object has a normalized X1 & Y1 that basically gives me a value of between 0-1.0 based on the current position of the IR objects. Next step is to write a very simple converter that takes this normalized value and the actual width or height to scale too and do the conversion.

public class NormalizedXYConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object param, CultureInfo culture)
    {
        try
        {
            float normalizedValue = (float)values[0];
            double scaleToValue = (double)values[1];

            return normalizedValue * scaleToValue;
        }
        catch (Exception)
        {
            return 0.00;
        }
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object param, CultureInfo culture)
    {
        return null;
    }
}

NOTE: This can also be done using Marlon Grech's LambdaValueConverter 

And all that is now left is to bind my indicators position to the converted X1 and Y1 values! I just add two Border elements and bind the left hand side's height and the top one's width to the normalized X1 and Y1

Here is the left hand "bar"

<Border Width="20" Background="Black" VerticalAlignment="Top">
    <Border.Height>
        <MultiBinding Converter="{StaticResource normalizedXY}">
            <Binding Path="Y1" />
            <Binding ElementName="mainWindow" Path="ActualHeight" />
        </MultiBinding>
    </Border.Height>
</Border>

And here is the top "bar"

<Border Height="20" Background="Black" HorizontalAlignment="Left">
    <Border.Width>
        <MultiBinding Converter="{StaticResource normalizedXY}">
            <Binding Path="X1" />
            <Binding ElementName="mainWindow" Path="ActualWidth" />
        </MultiBinding>
    </Border.Width>            
</Border>

This is the end result

The bar's nicely indicate exactly where the Wii remote is pointing. It is also very easy to create a simple pointer on the screen.

<Ellipse x:Name="Pointer" Width="10" Height="10" Fill="Blue">
    <Canvas.Top>
        <MultiBinding Converter="{StaticResource normalizedXY}">
            <Binding Path="Y1" />
            <Binding ElementName="mainWindow" Path="ActualHeight" />
        </MultiBinding>
    </Canvas.Top>
    <Canvas.Left>
        <MultiBinding Converter="{StaticResource normalizedXY}">
            <Binding Path="X1" />
            <Binding ElementName="mainWindow" Path="ActualWidth" />
        </MultiBinding>
    </Canvas.Left>
</Ellipse>

Just remember that the root panel must be a canvas for this to work!

As a side note, the Sensor Bar of the Nintendo Wii Console is actually just 2 infrared lights used to assist in the calculation of the position of the cursor on your television screen!

The infrared camera can track up to 4 infrared sources. this opens the door to multi-touch scenarios (Like Microsoft Surface)

Here I only investigated a single point touch solution. Multi-touch has it's own set of problems. If you want to learn more about multi touch, I suggest start looking at Microsoft Surface! 

Digging deeper

If you want more information of the exact protocol exchanged between the Wii remote and the host have a look at the following 2 sources:

Wii Brew

WiiLi

Well, that is all for now... In the future I will try and get a multi-touch solution to work...

Posted by rudi | 19 comment(s)
Filed under: ,

Windows XP Embedded Talk

If anybody in SA are interested in learning more about Windows XP Embedded, please have a look at the following event. Lynda Allen, Program Manager of the Windows XP Embedded team is in South Africa and has kindly agreed to present a overview of XPE.

Here is the original announcement on the XPE blog

Here is Lynda's bio:

I have been part of the Embedded team since 2003. My main area of responsibility has been the testing of component integration- this involved verifying the integrity of the components authored by the Windows team that owns the feature, ensuring that the components can be deployed on a minimal Embedded runtime without any errors and that the various components "play nicely" together. My work included testing components on a number of customer scenarios like RPOS, Kiosk etc., and also integrating components and scenarios with the different Embedded Enabling Features.

In June 2007 I switched roles within the team and I am now a PM (Program Manager), focusing on the Embedded community and generally finding ways to improve the overall developer experience.

Before working on the Embedded team I had various testing contracts with different teams at Microsoft (Windows Media Player 9, Encarta Language Learning) for a total of about 3 years. I am originally from South Africa where I worked in the cell phone industry, among other things, and have been in the USA since 1998.

My husband, Will, is a flight instructor and I enjoy flying aerobatics with him. However, my real passions are ice hockey and travel in any form.

Posted by rudi | with no comments
Filed under:

Blog using Windows Live Writer

Of all the new Windows Live products, the Writer is my favourite. It allows me to easily create and post blog entries. There is also a Insert from Visual Studio add-in that handles formatting and inserting of code straight from Visual Studio! Windows Live Writer easily post to a Community Server based blog (Like dotnet.org.za) and setup is a breeze!

Here is a example of the Insert from Visual Studio add-in

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }
}

and it even handles XAML

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        
    </Grid>
</Window>

Karl Shifflett also has a nice blog entry about this available here

Posted by rudi | 2 comment(s)

WPF in Finance finally open to all

Lab 49 in hosting a very interesting competition called WPF in Finance. This competition had a restriction that only US, Canada and Mexico could enter. This restriction has finally been lifted...

I am really looking forward to this competition, my entry is almost complete!!!

Hope to see more South Africans enter...

PS. If you would like to see some examples of work done by Lab 49, have a look here

Posted by rudi | 1 comment(s)

Review: NetAdvantage for WPF

This control package is for anybody who have been wondering if WPF is ready for the enterprise. WPF has been heavily criticise in the past of being only "eye-candy" but NetAdvantaged has taken it to the next level by adding 2 components sourly missing in WPF: Charts and Data Grids. NetAdvantage is created by Infragistics. I have no confirmed price yet but the product has RTM'ed. Here are the 2 main controls I liked

Control: xamChart

Both xamChart and xamDataGrid is used to visualize data. The centre of both components are their extended data binding capabilities! Let's have a look at how xamChart works (Think Excel on steroids!)

How it works

To create basic charts is very easy

<igCA:XamChart>
    <igCA:XamChart.Series>
        <igCA:Series Fill="#FFD21717">
            <igCA:Series.DataPoints>
                <igCA:DataPoint Value="5" />
                <igCA:DataPoint Value="7" />
                <igCA:DataPoint Value="4" />
                <igCA:DataPoint Value="3" />
                <igCA:DataPoint Value="7" />
            </igCA:Series.DataPoints>
        </igCA:Series>
    </igCA:XamChart.Series>
</igCA:XamChart>

Create a XamChart and add a Series. Each Series can contain multiple DataPoint's.

The data binding is just as easy, all that is required is that each Series sets it DataSource and DataMapping. I will quickly demo how to bind to a XML data store.

I created a very simple collection of employees (Names and ages) and filled it with some data. First step is to add a provider

<XmlDataProvider x:Key="EmployeeData" Source="C:\Employees.xml" />

Next, modify the chart a little bit...

<igCA:XamChart>
    <igCA:XamChart.Series>
        <igCA:Series Label="Age" ChartType="Column" DataSource="{Binding Source={StaticResource EmployeeData}, XPath=/Employees}" DataMapping="Value=Age; Label=Name " />
    </igCA:XamChart.Series>
</igCA:XamChart>

Easy!

The DataSource use normal binding and the DataMapping explains how to use the data provided!

This also comes with a full selection of 2D and 3D charts (IE. Line, Pie, Bubble, Candlestick, Spine, Area, etc).

What I didn't like

The data binding can get very confusing very quickly but that is to be expected!

Can I get it for free

I spend the last week writing my own stock chart for my Lab49 entry and I have to say if I had the choice I would rather buy it! It is very complicated!!! There are some resources available thou:

Simple Line Chart with Silverlight 1.1, part 1

Live Updating Line Graph in WPF

A WPF-powered 3D graphing library

Also note that Infragistics isn't the only company making chart controls... ChartFX and Syncfusion just to name a few!

Control: xamDataGrid

The xamDataGrid is a highly versatile, powerfull presentation control that can be used to create polished reports, tables, ledgers, product listings and much more with only 1 line of code!

How it works

Using the same XML data source as the chart, this is all that is required to create a basic data grid

<igDP:XamDataGrid DataSource="{Binding Source={StaticResource EmployeeData}, XPath=/Employees/Employee}"/>

WOW, is that all? What do I get for this 1 line of code? Well, everything (Data sorting, grouping, editing, resizing, etc)

It's also easy to setup record adding, alternating row highlighting, hierarchical data binding, etc!

What I didn't like

This is a great control, easy to use, stylish themes, great binding support!

Can I get it for free

Wait for it... IT IS FREE! xamDataGrid ships with NetAdvantage for WPF 2007 vol 1 Express and it is available for free!

Xceed also has a Data Grid available for free. I will hopefully review this control soon. If you want to use it thou, Sacha has a nice CodeProject article on how to use it available here.

Vertigo is also a design company making big WPF waves. Thy developed the Family.Show reference application where thy customized the standard ListView to add sorting and editing. Here is a detailed document on how thy did it.

What else is available

NetAdvantage is also undoubtedly the king of carousels! Thy have a xamCarouselPanel (Like the normal stack panel, wrap panel, etc). Then thy take it a step further with xamCarouselListBox (Adding multi-item binding and selection support). Then lastly thy go for broke by creating the xamDataCarousel (Flat and hierarchical data).

Where can I get it

http://www.infragistics.com/dotnet/netadvantage/wpf.aspx

Final thoughts

To just review 2 of their controls don't do them justice. If you need to see more examples have a look at their exemplar application, Tangerine. I truly enjoyed reviewing this package. It is well designed, has excellent help documentation and is extremely usefully!

Previous reviews

Blendables Essentials Mix v.1.0

[EDIT] Tim Sneath also has a review about controls available here

Posted by rudi | 4 comment(s)
Filed under: