Создание таблички данных в UWP из кода

#c# #.net #xaml #uwp

#c# #.net #xaml #uwp

Вопрос:

Я создаю анализатор XAML, и для взаимодействия с классами UWP мне нужно сгенерировать DataTemplate код из кода.

Я видел, что у DataTemplate класса есть LoadContent() метод, но как я могу его использовать? Есть ли способ указать, какой контент должен быть загружен?

Кстати, я попытался реализовать IDataTemplate интерфейс, но поскольку он внутренний, мне пришлось извлекать из DataTemplate .

Ответ №1:

Я видел, что класс DataTemplate имеет метод LoadContent(), но как я могу его использовать? Есть ли способ указать, какой контент должен быть загружен?

Вы можете обратиться к DataTemplate .Метод LoadContent в этом документе есть пример кода, показывающий, как использовать LoadContent метод для изменения внешнего вида границы во время выполнения. Это метод, позволяющий указать, какой контент должен быть загружен.

Я понимаю, что вы можете захотеть создать целое DataTemplate в коде, использующем синтаксический анализатор XAML, но не загружать тот, который существует в Resources , тогда вы можете закодировать, например, так:

 StringReader reader = new StringReader(
   @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
   <Ellipse Width=""300.5"" Height=""200"" Fill=""Red""/>
   </DataTemplate>");
var template = XamlReader.Load(await reader.ReadToEndAsync());
ListView lv = new ListView();
lv.ItemTemplate = template as DataTemplate;
ObservableCollection<int> coll = new ObservableCollection<int>();
for (int i = 0; i < 20; i  )
{
    coll.Add(i);
}
lv.ItemsSource = coll;
rootGrid.Children.Add(lv);
  

Здесь я проанализировал a DataTemplate из строки с помощью XamlReader и применил это DataTemplate как значение ItemTemplate a ListView .

Комментарии:

1. Спасибо, Грейс! Это нормально для 99% разработчиков. Для меня это не так долго, как я хочу, чтобы мой собственный анализатор XAML создавал шаблон данных с нуля. Что мне нужно, так это самому создать DataTemplate. Я не использую XamlReader, но мой OmniXAML (v2), который является кроссплатформенным. Я нахожу проблемы с UWP и с WPF, потому что они скрывают так много, что практически невозможно контролировать весь процесс создания шаблонов.

2. @SuperJMN, да, вы правы, я думаю, что это невозможно и в UWP. Возможно ли использовать собственный метод для каждой отдельной платформы, как в xamarin? В xamarin он используется DependencyService для соответствия каждой платформе. Прошу прощения, здесь я ничем не смог помочь.

3. Нет, я боюсь, что это не так. Хотя это возможно, у моего анализатора должна быть альтернатива: читать и раздувать модель без использования какого-либо другого анализатора. Использование другого синтаксического анализатора для раздувания DataTemplate нарушает весь его смысл : (