Это не вызов Ajax, это замораживает браузер. Это - обработчик успехов (applyTemplate). Вставка HTML в документ как этот может заморозить IE, в зависимости от сколько HTML, там. Это - потому что IE, UI является единственным, распараллелил; если Вы замечаете, фактические меню IE замораживаются также, в то время как это происходит.
Как тест, попробуйте:
applyTemplate = function(msg) {
return;
}
Silverlight не содержит DataTemplateSelector , который используется для выбора шаблона данных на основе элемента с привязкой к данным и объекта данных. Но построить свой собственный несложно.
Начните с класса, который наследуется от System.Windows.Controls.ContentControl . Этот класс имеет свойство для шаблона данных и свойство для содержимого, которое вы можете использовать для привязки. Создайте переопределение для метода OnContentChanged , подобного этому
protected override void OnContentChanged(object oldContent, object newContent)
{
}
. Я предпочитаю помещать шаблоны в отдельный словарь, на всякий случай, если мне нужно разделить их между проектами. В этом методе установите шаблон этого элемента управления на шаблон, выбранный из словаря. Что-то вроде:
Switch(DataStatus){
case 0: ContentTemplate = LoadFromDictionary(
"DataTemplateDemo;component/DataTemplates.xaml",
"Status0Template");
break;
case 1: ContentTemplate = LoadFromDictionary(
"DataTemplateDemo;component/DataTemplates.xaml",
"Status1Template");
break;
//etc
}
в этом случае должно быть имя словаря DataTemplates.xaml с парой шаблонов данных.
В вашем xaml-файле используйте класс селектора шаблона в качестве шаблона списка:
<ListBox x:Name="AnInterrestingList">
<ListBox.ItemTemplate>
<DataTemplate>
<DataTemplateDemo:DateTemplateSelector Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я использую этот вспомогательный метод, как показано ниже, для извлечения шаблонов из словарей:
public static DataTemplate LoadFromDictionary(string dictionary,
string template)
{
var doc = XDocument.Load(dictionary);
var dict = (ResourceDictionary)XamlReader
.Load(doc.ToString(SaveOptions.None));
return dict[template] as DataTemplate;
}
Обновление
Тем временем я написал сообщение в блоге с образцом кода на эту тему. Он доступен в моем блоге .