MVVM, Significant Projects (Shareable), Silverlight

Silverlight : MVVM Library and File Upload

Well its now a couple of days after XMAS here, so it’s back to work for us. Now for those that know me, I normally write about WPF and related technologies. I like WPF, but it has been a while since I played with its smaller brother Silverlight. I think the last time I played with Silverlight was way back in 2007, where I wrote this article (good in its day I suppose):


So I thought it was about time that I had a look at why Silverlight was getting so much Microsoft press and community attention lately, the futures Silverlight and all that. I say the future is doing cool work, and that is whatever technology that happens to be. But whatever.

This article was started off as a small part of a larger SL4 application that I am making to understand and play with RIA Services, but it kinda of morphed a bit, and has now taken on a life all of its own. Well actually it is kind of 2 sentient beings now :

Sentient Being 1 : A mini Silverlight class library that aids in MVVM development

The mini Silverlight library that came out of this investigation boasts the following features :

  • Commanding
  • Messaging
  • Services
  • Threading Helpers

Sentient Being 2 : What I was supposed to be doing all along, which was playing with the new SL4 bits. To do this I have created a SL4 uploader that can upload a file to a folder on the webserver, and will optionally show a SL3/4 ChildWindow of the uploaded file if it is an image file.

This is what it looks like after it has uploaded and image file

I hope that this demo application and the Silverlight MVVM library contained with it are useful to many of you.

Here is a link to the article:


MVVM, Significant Projects (Shareable), WPF

Cinch Code Generated Is Out

I am very pleased to announce that I have now released a code generator for my Cinch MVVM framework:

Here is a screen shot of the finished article



The cinch code generator article is available at using the link :

The source code is available as part of the main Cinch download, which I realise is a big download now, but I wanted to keep it all together so it was easy to keep code generator Cinch.dll reference synced.

Anyway the download link is over at the Cinch Codeplex site :

Enjoy, I am off for a holiday now, so I will not be answering any questions for quite some time, sorry about that.

Current Work, MVVM, Significant Projects (Shareable), WPF

Cinch (My MVVM framework) Part 4 is out

I just published part III of my MVVM framework series over at .

Here is the link


This time I talk about

Developing Models Using Cinch
Developing ViewModels Using Cinch

    * Choosing a ViewModel Base Class
    * ViewModelBase Class
    * How To Use The Exposed Services
          o EventLogger service
          o MessageBox service
          o Open File service
          o Save File service
          o Popup window service
    * Background Tasks
    * Mode Support



MVVM, Significant Projects (Shareable)

Cinch (My MVVM framework) Part 3 is out

I just published part III of my MVVM framework series over at .

Here is the link


This time I talk about

* DI/IOC using Unity IOC container
* Exposed Services
      o EventLogger service
      o MessageBox service
      o Open File service
      o Save File service
      o Popup window service
* Threading Helpers
      o Dispatcher extension methods
      o App.DoEvents
      o Background Tasks
      o ObservableCollection
* Doing MenuItems the MVVM way
* Closeable ViewModels




C#, MVVM, Significant Projects (Shareable), WPF

My MVVM Framework : AKA Cinch

I have just put up the 1st part in my MVVM series of articles which talks about a MVVM framework I am calling Cinch. I hope this will answer some of people short coming when working with MVVM and WPF. I have decided to dedicate an entire page here on my blog which will have all the links you should need to gain quick access to the entire series.

Current Work, Significant Projects (Shareable)

NetPics : My MSc Project

NetPics Web Site : NetPics

I am currently doing my Msc at Sussex University, and as for my degree we have to do a final project. So I chose to do something like Flickr, where people could share media with friends. At the moment I only allow images to be shared, but this could be any media, such as video, music, documents etc etc.

The idea is that a web user may share with their friends, and the freind can log into the same portal and view the shared content. But I also wanted to write an app, that would allow the user to upload very quickly using standard desktop techniques such as drag and drop. In fact they should not even be aware that they actually creating web content. To this end the project will use a dektop application, and an ASP .NET web app, and the desktop app will upload content using a web service. Thats the basic idea anyway.

Although I am still doing my MSc, and this project is still under development. A few screen shots cant hurt now can it.

The Web Site

This uses ASP .NET, and will use custom ASP .NET controls, and Ajax to allow the user to drag around pictures to form new albums etc etc





The Desktop App

The desktop app is .NET 2.0 stuff all the way. C# of course. The user of the desktop app will be able to create albums, edit images, view a slide show of image etc




The image editing is done, thanks to the use of the IPLab image processing library, by Andrew Kirillov. The IPLab is available here

I am hoping this will do even better than my BSc project. Ill let you know when ive done it, and its marked.

Significant Projects (Shareable)

ReMp3 : My BSc Project

ReMp3 Web Site : ReMp3 | Sussex University : Prizewinning projects

For my final year degree project at Sussex University (2006), I decided to write an application that would allow the following features:

  • Allow a user to construct a local playlist of music
  • Allow a user to RIP a CD to MP3 / WAV
  • Allow a user to create a media catalogue
  • Allow a user to convert from WAV to MP3
  • Allow a user to edit ID3 tag information for v1.0 / v1.1 ID3 tags
  • Save all track list information in XAML where it could also be validated
  • Allow a 2nd PC to control what was played on another PC, like a remote control.

So that was the requirements, and what I came up with was the ReMp3 project. It did fairly well overall, and I was quite happy with it. I ended up getting 1st place prize and being awarded an award by the British Computer Society.


It looked like the figure shown above here. There were 2 applications a server and a client. And is made use of host of .NET technologies such as Threading, Remoting, DataAcess (ADO .NET), Custom Controls, XML Parsing, Patterns, and Pinging.

Server App

The server app shown below, consisted of 6 main tabs, which were as follows:

  • Home
  • Media Player
  • Mp3 Editor
  • Media Library
  • CD-Ripper
  • WAV to MP3


Ill now show a screen shotof each of those controls

Media Player

For this control I used the Microsoft Media player, and wrote a wrapper around it, to carry out track lists, drag and drop, reordering of tracklist. One point was that a user could consruct a tracklist of any items on their network, and save that tracklist. As such I had to 1st Ping the host to make sure the tracks read from the saved tracklist, could still be found.


MP3 Editor Control

This control was really about byte frigging, as the ID3 information is part of the MP3 file, so it all about maniupulating bytes within the MP3 file.


Media Library Control

This is fairly straight forward ADO .NET stuff, except that I threaded all this recursive folder scanning, to free up the UI.re2.png

CD Ripper Control

Although id like to take the credit for this one, the code was mainly sourced at codeproject


WAV to MP3 Control

Although id like to take the credit for this one, the code was mainly sourced at codeproject


Client App

The client app shown below, consisted of 2 main tabs, which were as follows:

  • Track List
  • Media Library

Track List

This used .NET remoting to call methods on the Server form. It also had to be threaded to allow the server to block under certain conditions where the Client had to block waiting on the server. For instance when the current playing track changes is not a function of the Client but rather the Server, so the Client had to wait for the Server to notify it of a change.

This also used some unmanaged P/Invoke calls to obtain a list of network PCs, that a server could be picked from.



Media Library

The same as the Server app

AutoDiagrammer : My Reflector Addin, Current Work, Significant Projects (Shareable)

AutoDiagrammer : My Reflector Addin

At the beginning of March 2007, i published an article at codeproject about drawing a class diagram using reflection. This article is available here.

The thing being, as more and more people looked at it, they all wanted it to be available as an addin for Lutz Roeder C# De-Compiler which is free and available here.

So finally I gave in, and had a go at getting it to work as a reflector addin, I think i’ve now got there with v1.9 of AutoDiagrammer, which is available right now at the AutoDiagrammer auto update link.


Ive also kept most of the stand alone application features such as :

  • Zoomable window
  • Printing
  • Customization of what is shown on the diagram
  • Save to image


I have also now included any associations as a Tooltip, so when there are a lot of classes with a lot of lines going everywhere, simply point the mouse at a class, and see what it tells you.


I’m just waiting for the codeproject staff to update the article, and then ill be giving Lutz the Addin for official release at his CodePlex site. And then im sure there will be pleny of folk that will have some more suggestions….