Project Description281slides is a project to demonstrate how one could go about implementing something similar to http://280slides.com in Silverlight3.
Why does this project exist?
Proof of concept
I guess you've all seen
http://280slides.com. I think it's damn impressive and I wondered how much effort it would take to implement something similar in Silverlight3.
Inspirational
If one person thinks he/she learned something from 281slides it was worth the effort.
Showcase
I'm using this project when talking about WPF / Silverlight to demonstrate what I think are good ideas when it comes to Silverlight / WPF Development. My plans for this site is to extend it with what I think are the highlights with the way 281slides is implemented. For those that care these would be my primary guidelines:
- Separate behavior and look (one of corner stones of WPF / Silverlight and one of the reasons I avoid UserControls like the plague as they break this rule)
- Describe your application state as a bindable model
- Let the user interface bind to this model
- Don't rely on Controls to implement business logic, do it in the model.
- Use Controls in those case where your need to transform the model into a view model (281slides intends to do this, but cheats in some places at the time of writing)
MVVM
So is it MVVM? To be honest I don't know since when I read about MVVM it made lots of sense to me for WPF / Silverlight but I had no clear picture on how to implement it.
But if you look at it like this:
- 281slides has a model which also contains the business logic (very simple most of the time).
- It binds control on top of this Model to create model more suitable for viewing, that we could call a ViewModel.
- XAML binds to this ViewModel in order to generate the View.
So in some sense it's MVVM.
Not that I really think it matters.
Outstanding Issues
- Bulleted Text not implemented (and related commands not implemented as well)
- Themes not implemented
- Layouts not implemented
- Movies not implemented
- Color selection not implemented
- Rotation implemented but disabled as it didn't work properly
- Opacity slider generates lot of undo commands
- Resizing and repositioning generates two undo events instead of one.
- Serialization code isn't 100% there
- When window width goes small the images overlap