在页面上,我可以使用
ControlTemplate
来填充 Page
的 Content
。
在此示例中,基于任意变量 bleDevice、是否为空,内容有 2 个选择...
internal void SetContentViewBindingContext(BleDevice bleDevice)
{
BindingContext = bleDevice;
var controlTemplate = new ControlTemplate(() =>
{
if (bleDevice is null)
return new NoDeviceDataTemplate().LoadTemplate.Invoke();
else
return new BleDeviceDiagnosticItemDataTemplate().LoadTemplate.Invoke();
});
_contentView = new() { ControlTemplate = controlTemplate };
Content = (View)_contentView.ControlTemplate.LoadTemplate();
}
这工作正常......也许我对
DataTemplateSelector
的理解是错误的,但我想使用DataTemplateSelector
,因为在我看来,这是一种更优雅的动态选择页面内容的方式。但我不知道该怎么做。
Fwiw,这是我尝试过的方法,但不起作用,可能出于我不知道的明显原因:
ControlTemplate ct = new(new DeviceDetailsDataTemplateSelector().LoadTemplate);
_contentView = new() { ControlTemplate = ct };
Content = (View)_contentView.ControlTemplate.LoadTemplate();
有什么建议吗?
DataTemplate
的一个常见使用场景是在 ListView、CollectionView 或 CarouselView 中显示对象集合中的数据。并且 DataTemplate 设置为 ListView.ItemTemplate
属性。
DataTemplateSelector 可用于在运行时选择 DataTemplate 基于数据绑定属性的值。这使得多个 应用于同一类型对象的数据模板,可供选择 它们在运行时的出现。
最常见的使用
DataTemplateSelector
的场景是ListView
、CollectionView
或CarouselView
。 DataTemplateSelector 用于在运行时根据数据绑定属性的值选择 DataTemplate。如果您查看官方示例,您可能会发现 OnSelectTemplate
中的 DataTemplateSelector
方法返回的是 DataTemplate
而不是 ControlTemplate
。
所以它可能不适用于这种情况。
希望有帮助!