Показаны сообщения с ярлыком Silverlight. Показать все сообщения
Показаны сообщения с ярлыком Silverlight. Показать все сообщения

воскресенье, 9 августа 2009 г.

Танцы с бубнами.

Существует некоторый класс простых багов, которые могут запросто превратиться в головную боль, привести к срыву всех сроков и довести до нервного истощения. Чаще всего оказывается, что решение лежало на поверхности.

Вот например кусок XAML, который мучал меня почти сутки



Если попытаться записать ему DataContext из CodeBehind, вот так:

MainChart.DataContext = Sale.Data;

то можно поймать совершенно изумительное ВэллНоун исключение:
...................................................
.................................
................

Вот так всегда. Даже попытка повторить его не удалась. Спрашивается, с чем я боролся то сутки? Танцы с бубнами, да и только...

В общем исключение было следующим: "Collection was modified; enumeration operation may not execute". Как я его заборол не понимаю до сих пор. Код, вроде как, тот же. Раньше не работал, теперь работает.

Возможно нужно было убрать установку DataContext из шаблонов в XAML и все. Еще один вариант - необходимо явно указывать Binding на родительские элементы. А те в свою очередь необходимо инициализировать из XAML каким-то начальным значением. Что-то из этого работает.

среда, 29 июля 2009 г.

Странный баг в .Net Silverlight RIA Services

Портируя Silverlight приложение на .Net RIA Services столкнулся с неприятным багом, который сейчас и попробую описать.

Имеется некий метод TotalDueByRegionId который принимает в качестве параметра с именем inputName строку ( раньше принимал число, но баг повторяется независимо от этого ).
И вот необходимо вызвать его из XAML кода контрола, что я и делаю следующим образом, пытаясь передать ему параметр:











Запускаем код и отлавливаем в вызов TotalDueByRegionId в сгенерированом коде:



В этом месте инструкция по адресу 03Bh передает значение в переменную this._value



Следующая инструкция устанавливает эту же переменную в null:



Дизасемблер IL кажет нам следующие:


Что явно не вяжется с тем, что происходит в реальности. Я в тупике. Как жить дальше?

UPD: Запостил на официальный форум Silverlight: http://silverlight.net/forums/p/115386/260071.aspx#260071

UPD 2: Решение: Когда необходимо просто передать параметр в запрос - надо использовать тип parameter вместо controlparameter. Controlparameter позволяет забаиндиться к свойствам других контролов. (Надо меньше тупить... Надо меньше тупить... и чаще отдыхать)

пятница, 13 марта 2009 г.

Загрузка XAML во время выполнения

Загружаем элементы Silverlight из стороннего XAML файла.

private Canvas GetControlFromFile()
{
Uri uri = new Uri("Hands.xaml", UriKind.Relative);

System.Windows.Resources.StreamResourceInfo streamInfo = Application.GetResourceStream(uri);
if ((streamInfo != null) && (streamInfo.Stream != null))
{
using (System.IO.StreamReader reader = new StreamReader(streamInfo.Stream))
{
return XamlReader.Load(reader.ReadToEnd()) as Canvas;
}
}
return null;
}


Полученный элемент добавляем к другому элементу

LayoutRoot.Children.Add(GetControlFromFile);