我需要建立一个页面,其中有一些静态的“始终存在”的元素,和一些交替组的元素,显示和隐藏取决于用户的行动。
一种方法是将每组元素组合到某个容器(如StackLayout
)中,并控制它们的可见性,如下所示:
<StackLayout IsVisible="{Binding IsLoaded}">...</StackLayout>
<StackLayout IsVisible="{Binding IsLoaded}, Converter={helpers:InverseBoolConverter}">...</StackLayout>
然而,如果有超过2组这样的元素,就会增加更多的开销,我觉得必须存在一种更好的实现方式。
我找到的是DataTemplateSelector,但是:它似乎适用于“项目列表”类型的控件。我想知道ContentPage或非列表控件是否存在类似的东西,因此我可以定义2个或更多的替代模板(或控件),这些模板绑定到内部的同一个ViewModel,并基于页面ViewModel数据切换它们的可见性:ViewModel.IsLoaded=true显示一个模板/控件,否则显示另一个。
注意:不同的控件样式对于我的场景是不够的,它是不同的控件集。
1条答案
按热度按时间23c0lvtd1#
StackLayout
can specify aDataTemplateSelector
in itsBindableLayout.ItemTemplateSelector
:BindableLayout.ItemsSource
might be a collection containing one item:The
DataTemplateSelector
might be triggered as follows:Sample
DataTemplateSelector
:Sample usage in XAML: