Mobility days sessions & demos

Hi, first things first, thanks so much to the organizers & sponsors of the Mobilitydays event (www.mobilitydays.com) for celebrating such great and interesting event.

Second, as promised, here are the slides & demos with full code.

First, the slides:

Developing WP7 Applications with Silverlight – http://www.slideshare.net/joslat/md2010-jlwp7sldev

Developing WP7 Games with Silverlight – http://www.slideshare.net/joslat/md2010-jlwp7slgamedev

And do not forget to check the demos, all together in a single compressed file for your ease.

http://www.brainsiders.com/mobilitydays/MobilityDays_JLDemos.rar

Thanks & Have fun!!

Speaking! MobilityDays!! TechEd Europe 2010!!!

Well this is one of the moments that one of you that loves to code, design, speak & share enjoys the most, when other fellows ask you to help them share knowledge 🙂

First of all, thanks to the magnificient team of professionals that is managing both events and I’m extremely glad to have been chosen as speaker for “first time” at these great events. My thanks!

First things first, MobilityDays is happening the Day after tomorrow.. on 23th of September, in Zagreb, Croatia, to the East of Europe. But do not worry, you can assist without having to book a flight! Sesssions will be broadcasted through live meeting :).

There, I’ll be speaking on two sessions : “Developing Windows Phone applications with Silverlight” and “Building games forWindows Phone with Silverlight”. Sessions will be in english.

So, what are you waiting for, go and register : www.mobilitydays.com (update: it’s free for MVP’s and INETA User Group Leaders) and well, there are a lot of very good speakers there – apart from me, the “newbie” I mean 😉 – Joking!!  I expect to make a pretty entertaining and insightful sessions and I hope you enjoy them :).

Also, I’ve been selected to speak at TechEd Europe 2010 conference, so can’t be happier.

I know this deserves a “post apart” and it will have it definitely – let me finish this week and I’ll be back with more details regarding the session that, for starters, will focus on the 3D (2.5D & 3D) capabilities of Silverlight, on a very intense practical session, going from the basis to creating awesome – and I mean that – 3D interactive interfaces in Silverlight. More about this later…

By now, if you haven’t registered, don’t think more, go to http://europe.msteched.com/registration and register before tickets run out!!

Have fun!

Silverlight DataGrid – Issues solved!!

Today is a happy day….  

I am actually battling with a Silverlight business application with some interesting design & behavior – in fact it is a migration from a VB6.0 App.. but the design of the screens is not bad and it’s pretty useful to the task they are designed for. 

One of the most costly things I’ve suffered is that I had to show off some information grouped and totalized (nothing strange here, you just have to search a bit and you know the how-to) and also each group of information could have different format on the same column…. and oh my, this has been a real killer… 

I tried to change it programmatically but the Binding is bound to the column… so I tried to change the binding, first through the StringFormat but… hey! it is not bindable! Bummer… then I tried to use a custom Converter and bind the ConverterParameter but it also happened not to be bindable – or I did not find how to implement it. I tried also to implement a custom Converter deriving from FrameworkElement and IConverter so I could create a bindable property for using it instead of the ConverterParameter…. but that didn’t work out properly… 

Until I found a gem, the “Silverlight MultiBinding” solution that a smart guy, Colin Eberhardt conceived & developed to implement a similar binding model to that of WPF, with more funcitons and to be clear, more mature. Silverlight team, we need that on SL ASAP if we are to build serious SL business apps… if not some developers can get near to crazy to solve some “customer needs”… like I have ;). 

Regarding the MultiBinding, you can read from Colin on his blog here: http://www.scottlogic.co.uk/blog/colin/2010/08/silverlight-multibinding-updated-adding-support-for-elementname-and-twoway-binding/ 

Gladly I’m not alone as “Full Databinding Support” is the top requested feature on the Silverlight Feature Suggestions forum here:  http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions, with over three thousand points, it’s the Nº1!!. 

Wich includes requests for fabulous features like: 

+ ValueConverter ConvertParameter binding.
+ StringFormat binding.
+ Strongly typed DataBinding support (intellisense).
+ Conditional Binding.
+ Binding to dynamic objects .
+ More extensibility.
+ Etc.. 

Regarding to my solution I implemented it on the DataGridTemplateColumn for each column I needed to format conditionally, considering also that some columns will need to be editable, so I had to use the usual binding for the editable template even that the TwoWay binding works on the Multibinding implementation but I found no way to keep the format from being reset (by now the TwoWay multibinding requires that all the properties are TwoWay). You can see the XAML code next: 

<data:DataGridTemplateColumn Header=”Budget” > 

<data:DataGridTemplateColumn.CellTemplate>

<DataTemplate>

<TextBlock TextAlignment=”Right” > 

<multibinding:BindingUtil.MultiBindings>

<multibinding:MultiBindings>

<multibinding:MultiBinding TargetProperty=”Text” Converter=”{StaticResource MultiBindingGenericConverter}” >

<multibinding:MultiBinding.Bindings>

<multibinding:BindingCollection>

<Binding Path=”Budget” />

<Binding Path=”Budget_Format” />

</multibinding:BindingCollection>

</multibinding:MultiBinding.Bindings>

</multibinding:MultiBinding>

</multibinding:MultiBindings>

</multibinding:BindingUtil.MultiBindings>

</TextBlock>

</DataTemplate>

</data:DataGridTemplateColumn.CellTemplate>

<data:DataGridTemplateColumn.CellEditingTemplate>

<DataTemplate>

<TextBox TextAlignment=”Right” Text=”{Binding Budget, Converter={StaticResource RoundedConverter}, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}” >

</TextBox>

</DataTemplate>

</data:DataGridTemplateColumn.CellEditingTemplate></data:DataGridTemplateColumn>

So if you have a similar scenario, I’d recommend Colin’s solution.

Other issue I had with the DataGrid was with the Virtualization – it’s virtually impossible to deactivate. Also the search for a solution on this was” a bit chaotic… “

I was lucky to find out this gem here http://forums.silverlight.net/forums/t/101075.aspx on which Xusan is telling us not to deactivate it but to change its structure and take out the component that provides the virtualization, changing its ControlTemplate.

That saved my day as the DataGrid really is not “Recycling” but “Reusing”, which I think should be changed or made  optional. As this can be Ok for performance reasons but on others you can end up coding a huge clean-up function that will kill the performance of the virtualization…  if there is a quick way of “cleaning” a row or cell, it would be great this was as fast as possible…

Well, will keep on finishing my DataGrid based project management Silverlight Bizz app 😉 

Have fun!

Simple trick for getting right the DataGrid’s SelectedItem

I have been developing a Silverlight business application and one of the problems I have found is the “inconsistency” of the DataGrid… at least of some of its behaviors, when I click on a row, I expect that the SelectedItem (the clicked one) is set on the corresponding DataGrid property. 

But it does not. at least not “always”, lets be clear maybe I’m doing something wrong but this randomness on this behavior is driving me crazy, if I click on a Grid row, it should select it and mark the SelectedItem on the corresponding property, right? 

I have been doing so in the MouseLeftButtonUp of the DataGrid, so that’s what I expected but… sometimes it had it, sometimes not… bummer! 

So I have been trying to detect why is this happening but could not discover it… maybe I’m wrong in any of the assumptins but meanwhile, I got a workaround that does really work :). 

The following code explains it all… 

void datagrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { 

  if (datagrid.SelectedItem == null){ 

 

      FrameworkElement fe = (e.OriginalSource as FrameworkElement); 

 

      FrameworkElement feCell = (fe.Parent as FrameworkElement); 

 

      var myData = feCell.DataContext; 

  } 

} 

Basically I check first If I have the SelectedItem set, sometimes it is, so then I avoid doing the following trick.

The “trick” mainly gets the originalsource that is launching the event, that is the control inside the cell of the grid,  most of times it will be a TextBox. Second I get the Parent, with this I am getting to the Cell.

Note that if you have a complex structure you should set up a recursive function to go “up” until you get a reference for the cell.

From the cell you have the datacontext which is the item whe should have got from the SelectedItem property.  you should cast it to the inherent type and get any value you need from it.

Also, please note that the DataContext could be caught from the first element (OriginalSource) but it’s more ellegant to get it from the Cell, and if it is a complex custom cell this also asures that it gets the DataContext properly.

And yes, it works 100% 😉

Happy coding!

PS: If somebody knows what I have done wrong or why the DataGrid.SelectedItem Property does not return the clicked item, I would be happy to hear. 🙂

Trick for solving WCF RIA Services issue..

I am having the following issue: Sometimes, when I am issuing a DomainService call using WCF RIA Services, I got the callback right but the loadoperation I have assigned has no results, meaning no entities are returned and the “IsComplete” property is false. 

The following code resumes what I am doing, including the LoadOperation definition, the calling function and the callback function: 

LoadOperation lo; 

private void CallDomainService(){ 

DomainContext dc =  new DomainContext(); 

lo = dc.Load(dc.GetDataQuery()); 

lo.Completed += new EventHandler(lo_Completed); 

} 

And it executes well and calls properly lo_completed… 

void lo_Completed(object sender, EventArgs e){ 

     if ((lo != null) && (lo.IsComplete == true)){

      if ((lo.Entities !=null) && (lo.Entities.Count() >= 1))         //Get the returned entity or whatever..

   }

} 

The issue is that I am getting properly the details of the load Operation, but some random times, it does not return the object properly, it is not null but its .IsComplete property is False and the Entities collection is empty, though that it has had been processed properly by the server.

The trick or workaround here is to get, in this exact case, the loadoperation from the server, which is a reference to the right load operation. The code should be like this:

LoadOperation<EntityType> lo2 = (LoadOperation<EntityType>)sender;

if ((lo2.IsComplete) && (lo2.Entities.Count() >= 1)) {

   EntityType Entity = lo2.Entities.First();

 

}

And with this, problem solved.

Are you having this random issue or others? anybody found why this is happening?

3D (2.5D) Interaction Experimental site

If you have followed me on my latest posts you should have seen some of my Behavior experiments for 3D interaction, trying to emulate already existing Real world & 2D interaction design patterns as MouseOver, Click, etc… in 3D (or Silverlight’s actual 2.5D, for Desktop & Windows Phone).

I have put the site www.bcndev.net as a sample or playground thinking on nothing but on providing a 3D interactive experience, with the points that I am not being paid for (it’s a volunteer work for promoting the Barcelona Developers User’s group event) and I have thought on nothing (I repeat myself but I want this clear) apart from the experience, so do not expect a great degree of indexability, accessibility, usability or even performance… the Matrix background effect is a killer of CPU resources …

Disclaimers: If I had the time, hopefully I will do it “when I can” I will implement a “effect adjuster” for adapting it to reduce depth layers & elements on each layer and, maybe, even the falling speed… to adapt it to get a decent framerate… I’ve got on mind other optimizations but sadly not the time, so sorry in advance if this is going too slow for you to appreciate the 3D interactions.
I have added GPU acceleration & left all the debugging on for you to be able to see the performance. It should not go very bad if you have a decent GPU so please leave me a message if it does not, and include the FPS. Thanks!!!

This site is using the 3D behaviors I have published at the Expression Gallery and some others that I have yet to polish before publishing, some of the new ones are part of an experiment of providing 3D effects to 2D elements (usercontrols in fact) and allowing them to nest their DataContexts and thus providing an interesting way of navigating the information. This has yet to be polished but you can see it working when you press the “+ Info” button and then the “Ver Detalles” button…” then just also press over a session or speaker…
As for the behaviors, you can see & get them here:
http://gallery.expression.microsoft.com/en-us/Project3DToMouse
http://gallery.expression.microsoft.com/en-us/Slide3DToMouse
http://gallery.expression.microsoft.com/en-us/MouseOver3D
http://gallery.expression.microsoft.com/en-us/Loop3d
http://gallery.expression.microsoft.com/en-us/Animate3D

I would greatly appreciate any feedback you can provide, thanks!!

And, as always, have fun!

Note: The matrix effect is an evolved version of the original code from Terence Tsang, http://www.shinedraw.com – thanks Terence for all those great samples :).

Animate3D, another Silverlight behavior

Animate3D is a a Silverlight Design Interaction Pattern for making easier to implement 3D Interaction – In this case the effect provided is 3D animation that launches in response to a concrete event providing a PlaneTransform animation which can animate a target object with the three Axis, X, Y, Z and its Global and Local offsets. It also allows us to decide an initial and a final alpha for the animation.

We can also indicate if we want the actual state of the object to be the Final state of the animation, providing on the behavior only the first animation state. We can of course add both states, (initial and final). But, for the sake of displaying a not projected control with text (if it has any projection Silverlight 4.0 actually shows it blurred no matter what we do) this option has been added.
It is inspired trying to implement an easy way of defining & executing very quickly 3D animations  that respond to user actions.

It has been designed to be used together with the other 3D Behaviors, that have been published at the Expression Gallery, including this one:
• http://gallery.expression.microsoft.com/en-us/Project3DToMouse
• http://gallery.expression.microsoft.com/en-us/Slide3DToMouse
• http://gallery.expression.microsoft.com/en-us/MouseOver3D
• http://gallery.expression.microsoft.com/en-us/Loop3d
• http://gallery.expression.microsoft.com/en-us/Animate3D

You can also check how this and the other mentioned effects look used together here: http://www.bcndev.net (it is not published right now but will be in short…)
Also I would love to see places where this behavior(s) are being used or any design/implementation you might have done with them.

If you like the behavior, I’d be appreciated if you could vote some stars for this behavior, my thanks!

Have fun 🙂