Denis Gladkikh

outcoldman

My personal blog about software development

  • 13 Apr 2011
  • Silverlight, XAML, Binding, Silverlight 5

Буквально несколько часов назад нам анонсировали Silverlight 5 на конференции MIX’11. Даже можно скачать Silverlight 5 Beta and Tools и попробовать в живую. Я тоже это сделал, ради любопытства.  Поставил на виртуальную машину, попробовал несколько новых фич. Вам, кстати, тоже не рекомендую ставить на рабочую машину, если вы Silverlight разработчик, и сейчас разрабатываете на Silverlight 4. У меня постоянные зависания, повторяется всегда с ChildWindow. Но это все может быть из-за того, что стоит все на виртуальной машине, да еще и на Windows Server 2008 R2 (та виртуалка, на которой мы разрабатывали проект на HackDay). Но я вас предупредил.

Ознакомиться с новыми фичами Silverlight 5 можно (и нужно!) в нескольких местах, например, в блоге Tim Heuer – Silverlight 5 Beta – A guide to the new features. Еще кто-то кинул в твиттере ссылку на pdf документ, на сайте Silverlight.net Silverlight 5 Beta Technical Features (как на него попасть – не знаю).

Вкратце из мне понравившегося в Silverlight 5 (то есть то, что я действительно ждал и хотел бы использовать сейчас):

  • У RelativeSource появился Mode=FindAncestor, тот, который уже давно живет в WPF, и которого мне лично не хватало в Silverlight. При помощи его можно указать, какой тип элемента ищем (так же какой по счету, если нужно пропустить несколько), и байндинг пройдется по дереву контролов вверх (по родителям) в поисках контрола с указанным типом. Особенно это полезно в Template описаниях, будем надеяться, что там все будет работать.
  • У DataTemplate теперь можно задать тип, для которого вы его описываете. Опять же, это хорошо известная фича для WPF разработчиков. Очень полезно. Недавно, например, к TreeView байндил иерархическую коллекцию объектов, среди которых встречаются разные типы, наследуемые от одного базового. Конечно же, каждый тип нужно отображать по-разному, пришлось сделать дополнительные свойства у моделей, и просто в Template прятать некоторые части. В SL5 будет намного проще, нужно описать разные DataTemplate для разных типов.
  • Теперь есть возможность создавать MarkupExtension. При помощи него  можно сделать лучшее решения для локализации приложения. Он позволяет расширить синтаксис XAML, и можно, например, вместо StaticResource или Binding придумать что-то свое. Как я уже сказал – в основном все используют для локализации.
  • Теперь можно отлаживать байндинг в Visual Studio. То есть ставить точку останова прямо в XAML коде в местах Binding. Честно признаюсь, фича прикольная, но мне как-то и без нее было хорошо. Я и так могу понять, что Source не тот установлен или типы не совпадают. Мне хватало просмотра Output в Visual Studio.

И мне не понятны опять какие-то кривые решения Silverlight давно проверенным вещам. Вот сделали они для Silverlight 5 поддержку окон, теперь можно в OOB приложениях создавать окна, но как они сделали, что это:

Window tearOffWindow = new Window();
tearOffWindow.Height = 400;
tearOffWindow.Width = 600;
tearOffWindow.Top = 24;
tearOffWindow.Left = 30;
tearOffWindow.Title = “Stock Console”;tearOffWindow.Content = myUIElement; //Set content to someFrameworkElement
tearOffWindow.Visibility = Visibility.Visible; //Display the Window

Почему нет нормального метода Show? Close то есть. И почему нет поддержки модальных окон? В общем, если это не недоделки SL5 Beta, то я уже знаю несколько новых фич, которые нам стоит ожидать от Silverlight 6 или 7. Спешат с версиями Silverlight, и всегда контролы у них не доделанные, архитектура не доработанная и т.п.

Думаю, что скоро будут опубликованы интересные и подробные статьи о новых фичах Silverlight 5. А вообще, это пока что бета версия, для меня это просто повод посмотреть, задуматься и отложить до выхода более свежей версии.

Have a question? Want to follow up? Send a comment? Or just ask for help or consultation? Send me an email at public[at]denis[dot]gladkikh[one more dot]email.