Я создал приложение Xamarin.Forms UWP, и мне казалось, что у вас на ногах ведро с цементом, когда вы пытаетесь пересечь Средиземное море вплавь. Поэтому я переключился на нативное программирование UWP.
Мое приложение создается на 95% динамически. Все элементы управления страницами на страницах зависят от того, что сохранено в базе данных.
У меня есть одна страница входа, carouselPage (FlipView) и QuitPage.
Все остальные страницы загружаются динамически и добавляются в FlipView-ItemsSource.
В Xamarin у меня был TemplateSelector, подобный тому, что указан в этой ссылке: https://github.com/alexrainman/CarouselView/blob/master/Demo/Views/MyTemplateSelector.cs
Мой вопрос: как я могу динамически создавать DateTemplates из моих представлений/страниц?
Кстати: я переключился с Xamarin на родной из-за серьезных проблем с производительностью. Карусель каждый раз переключается на первый элемент, и ей требуется несколько секунд, чтобы снова отобразить «настоящую» страницу после изменения размера (через виртуальную клавиатуру).
Я надеюсь на решение без таких проблем с производительностью, когда в списке более 30 элементов.
Может быть, кто-нибудь может объяснить, почему существует такая проблема с производительностью? Я не могу поверить, что каждая страница будет перезагружена из-за размера, измененного виртуальным килобайтом.
Спасибо всем заранее.
РЕДАКТИРОВАТЬ:
После того, как я нашел кнопку для редактирования, вот что у меня получилось:
У меня есть страница с именем CarouselView. В Xaml у меня есть FlipView с именем «myCarousel».
В CodeBehind у меня есть следующий код:
public partial class WellcomeView : BasePage {
#region Fields + Properties
private int _position;
public int Position { get { return _position; } set { _position = value; } }
#endregion
public CarouselView() {
InitializeComponent();
myCarousel.ItemTemplateSelector = new MyTemplateSelector();
DataContext = new WellcomeViewModel(null, null, null, null, null);
}
public class MyTemplateSelector : Windows.UI.Xaml.Controls.DataTemplateSelector {
private DataTemplate GreetingTemplate;
...
public MyTemplateSelector() {
this.GreetingTemplate = (DataTemplate)Windows.UI.Xaml.Markup.XamlReader.Load(new GreetingView().Content.ToString());
...
// Here it throws an error. No matter if MainPage (with content) or other Views (with Content==null). But in every case I get a XamlParseException.
} // End Ctor
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) {
var TemplateType = item.GetType();
switch (TemplateType.Name) {
case "GreetingViewModel":
return base.SelectTemplateCore(GreetingTemplate );
default:
return base.SelectTemplateCore(BegruessungTemplate);
} // End switch-case
} // End SelectTemplateCore()
} // End MyTemplateSelector()
} // Конец класса WellcomeView
Вот ошибка, которую я получаю...
А вот и StackTrace:
at Windows.UI.Xaml.Markup.XamlReader.Load(String xaml)
at MEDePORT_Win_Native.Views.WellcomeView.MyTemplateSelector..ctor()
at MEDePORT_Win_Native.Views.WellcomeView..ctor()
at MEDePORT_Win_Native.MEDePORT_Win_Native_XamlTypeInfo.XamlTypeInfoProvider.Activate_11_WellcomeView()
at MEDePORT_Win_Native.MEDePORT_Win_Native_XamlTypeInfo.XamlUserType.ActivateInstance()
at Windows.UI.Xaml.Controls.Frame.Navigate(Type sourcePageType, Object parameter)
at MEDePORT_Win_Native.App.OnLaunched(LaunchActivatedEventArgs e)
РЕДАКТИРОВАТЬ: с "new MyView().Content.ToString()" я получаю только имя типа. Например, «Windows.Ui.Xaml.Controls.Grid».
Итак, похоже, мне нужно извлечь xaml из представления и преобразовать его в строку.
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ:
Каков эквивалент UWP для следующего кода?
DataTemplate template = new DataTemplate { DataType = typeof(< Type of the object the template refers>) };
DataTemplateSelector
, например это. - person Scavenger   schedule 18.08.2017