Управление доставкой динамического содержимого в Silverlight - Загрузка только данных XAML
ОГЛАВЛЕНИЕ
Загрузка только данных XAML
Посмотрим, как используется WebClient для загрузки данных XAML и включения их в визуальное дерево. В приложениях Silverlight 2 динамическая загрузка простых данных XAML совсем не обязательно обеспечивает требуемые вам возможности программирования. Строка XAML должна быть простым кодом XAML, не содержащим ссылок, требующих разрешения на этапе выполнения, таких как привязки или ссылки на стили и события.
После того, как строка XAML загружена, используется класс XamlReader для преобразования ее в элемент интерфейса пользователя, который можно добавить в существующую объектную модель документа. В следующем далее коде показано, как программным образом загрузить строку XAML с URL-адреса. Отмечу, что URL-адрес потребуется предоставить в виде объекта Uri.
WebClient client = new WebClient();
client.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(OnDownloadCompleted);
Uri uri = new Uri("xaml.ashx", UriKind.Relative);
client.DownloadStringAsync(uri);
URL-адрес может указывать на ресурс с простым кодом XAML или на конечную точку, возвращающую ответ text/xaml. В следующем коде загруженный код XAML обрабатывается и добавляется к местозаполнителю в визуальном дереве.
void OnDownloadCompleted(object sender, DownloadStringCompletedEventArgs e)
{
// Parse XAML to a UI element
string xaml = e.Result;
UIElement dom = XamlReader.Load(xaml) as UIElement;// Append to the DOM
Placeholder.Children.Clear();
Placeholder.Children.Add(dom);
}
Как было упомянуто, местозаполнитель может быть элементом объектной модели документа, визуализируемой в текущий момент в подключаемом модуле. Отмечу, что дочерние объекты элемента интерфейса пользователя образуют коллекцию и визуализируются в виде последовательности. Это означает, что во избежание нежелательного перекрытия элементов при выполнении обновления сначала следует удалить элементы, а затем добавить их.
Сериализация XAML, выполняемая посредством классов XamlReader и XamlWriter, основывается на принципе отмены ссылок расширения и сохранении значений этапа выполнения поверх параметров этапа разработки. А что, если требуется загрузить содержимое XAML и настроить его до отображения, например посредством динамической привязки данных? Возможности встроить привязки в исходный код XAML не существует, но в загруженном коде XAML можно определить местозаполнители, извлечь их с помощью синтаксического анализа и настроить их программным образом на любое требуемое значение. Однако в Silverlight 2 более предпочтительным решением является, безусловно, загрузка пакета XAP.