我創建了一個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