我创建了一个Xamarin.Forms UWP应用程序,它让我感觉像一只试图穿过地中海游泳的脚上满是水泥的桶。所以我转而使用原生UWP编程。用于UWPs的TemplateSelector FlipView
我的应用程序被动态创建为95%。页面上的所有页面控件都依赖于数据库中保存的内容。
我有一个登录页面,一个carouselPage(FlipView)和一个QuitPage。
所有其他页面都被动态加载并添加到FlipView-ItemsSource中。
在Xamarin我有喜欢的人在这个链接TemplateSelector: https://github.com/alexrainman/CarouselView/blob/master/Demo/Views/MyTemplateSelector.cs
我的问题是: 我如何动态地创建DateTemplates了我的意见/页的?
顺便说一句: 我从Xamarin切换到本机,因为有严重的性能问题。轮播每次切换到第一个项目,并且需要几秒钟才能在更改大小(通过虚拟键盘)后再次显示“实际”页面。
我希望在列表中有超过30个项目时没有此类性能问题的解决方案。
也许有人可以解释为什么有这样的性能问题?我不能相信每个页面都会因虚拟kb改变的大小而重新加载。
谢谢大家提前。
编辑:
后,我发现编辑按钮,这是我走到这一步:
我有一个名为轮播画面页。在Xaml中,我将FlipView命名为“myCarousel”。
在代码隐藏我有以下代码:
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
而这里的堆栈跟踪:
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)
编辑: 使用“新的MyView()。Content.ToS tring()“我只知道类型的名称。例如“Windows.Ui.Xaml.Controls.Grid”。
所以看起来我需要从视图中提取xaml并将其转换为字符串。
编辑编辑编辑编辑编辑:
什么是UWP等同于下面的代码?
DataTemplate template = new DataTemplate { DataType = typeof(< Type of the object the template refers>) };
UWP也有[DataTemplateSelector](https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.datatemplateselector)。 – Scavenger
@清道夫是的,这是真的,但我没有找到任何功能的解决方案。 我在网上看到过这样的东西: private DataTemplate FilmTemplate; ());我们可以使用这个方法来创建一个新的MovieView()。 } 但我得到除MainPage以外的每个页面/ ContentView的NullReferences。看来,Xaml的“内容”没有加载,但我不明白为什么。 如果我可以编辑我的开幕帖子,我会添加我目前的“解决方案”以便更好地理解。 谢谢。 –
你应该可以编辑你自己的问题。请将代码添加到您的问题中,[mcve]可能会更有帮助。 – Scavenger