pondělí 30. května 2011

Silverlight DataForm ItemsSource is null when DataForm is not visible

This is just a quick post:

When DataForm is not visible, then its ItemsSource collection is null. This can make sense, but it may also cause problems, imagine the following:

The DataForm is in Expander. On a click of a button you want to expand the Expander and add new item to the DataForm:

MyExpander.IsExpanded = true;
//this call passes
MyDataForm.AddNewItem();

//but here CurrentItem will be null
var vm = MyDataForm.CurrentItem as MyViewModel;

//and here you will get NullPointerException
vm.MyProperty = "value";

The problem is that when you set IsExpanded to true, the UI does not get updated right by the way, so you will have to force it by calling this.UpdateLayout(). After this the ItemsSource collection will be binded to whatever enumeration you have set in the XAML and the next call of AddNewItem() will set the CurrentItem property of DataForm to a non-null value.

VS 2010 CLR20r3 crash

When working on a Silverlight project I have encountered the following crash and I was unable to open my solution in Visual Studio.

Visual Studion 2010 Crash
Problem Event Name: CLR20r3
Core error: NullRefferenceException

As the solution was composed of several project I have decided to remove from the solution file one by one and this way see which project was causing the error.
I was quite lucky, it was the first on, that I have tried - the Silverligt project.

Here is the structure of VS 2010 solution file (.SLN file):

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{Project GUID") = "Project name1", "Project reference1", "{Reference GUID}"
EndProject
...
...
Project("{Project GUID") = "Project name2", "Project reference2", "{Reference GUID}"
EndProject
Global
...runtime configurations etc.
EndGlobal

So it is quite easy to remove one project reference just by deleting the Project - EndProject part.

Note that if your solution is under Team Foundation Server source control, the solution file might be read-only so you will have to change that in the properties of the file.

Once you have removed the project causing the error you can just easily add it to the solution from Visual Studio (Add Existing Project).

Hope it helps.