我需要構建一個頁面,其中包含一些靜態的“始終存在”元素,以及一些根據用戶操作顯示和隱藏的備用元素組。
一種方法可以將每組元素組合到某個容器中,StackLayout
并控制它們的可見性,如下所示:
<StackLayout IsVisible="{Binding IsLoaded}">...</StackLayout>
<StackLayout IsVisible="{Binding IsLoaded}, Converter={helpers:InverseBoolConverter}">...</StackLayout>
但是,如果有超過 2 個這樣的元素組,則會增加更多開銷,我覺得必須存在更好的實作方式。
但是,我發現的是DataTemplateSelector:它似乎適用于“項??目串列”型別的控制元件。我想知道 ContentPage 或非串列控制元件是否存在類似的東西,所以我可以定義 2 個或多個替代模板(或控制元件),并系結到內部相同的 ViewModel,并根據頁面 ViewModel 資料切換它們的可見性: ViewModel.IsLoaded =true 顯示一個模板/控制元件,否則顯示另一個。
注意:不同的控制元件樣式對于我的場景來說是不夠的,它是不同的控制元件集。
uj5u.com熱心網友回復:
StackLayout
DataTemplateSelector
可以在其中指定 a BindableLayout.ItemTemplateSelector
:
<StackLayout BindableLayout.ItemsSource="{Binding Source}"
BindableLayout.ItemTemplateSelector="{StaticResource TemplateSelector}"/>
BindableLayout.ItemsSource
可能是一個包含一個專案的集合:
Source = new ObservableCollection<Model>
{
model
};
可能會DataTemplateSelector
觸發如下:
Source.Clear();
Source.Add(model);
樣品DataTemplateSelector
:
public class TemplateSelector : DataTemplateSelector
{
public DataTemplate DataTemplate1 { get; set; }
public DataTemplate DataTemplate2 { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
Model model = item as Model;
// Determine template; DataTemplate1 or DataTemplate2
return template;
}
}
XAML 中的示例用法:
<DataTemplate x:Key="DataTemplate1">
...
<DataTemplate x:Key="DataTemplate2">
...
<namespace:TemplateSelector x:Key="TemplateSelector"
DataTemplate1="{StaticResource DataTemplate1}"
DataTemplate2="{StaticResource DataTemplate2}" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507031.html
標籤:xamarin xamarin.forms .net-maui maui 社区工具包
上一篇:如何在C#xamarinformsandroid中使用ImageButton水平移動?
下一篇:找不到路徑nuget\packages\xamarin.firebase.ios.core\8.10.0.1\lib\net6.0-ios15.4的一部分