将 DataTemplateSelector 与 ContentTemlate 结合使用(无 xaml)

问题描述 投票:0回答:1

在页面上,我可以使用

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();

有什么建议吗?

maui controltemplate datatemplateselector
1个回答
0
投票

DataTemplate
的一个常见使用场景是在 ListView、CollectionView 或 CarouselView 中显示对象集合中的数据。并且 DataTemplate 设置为
ListView.ItemTemplate
属性。

DataTemplateSelector 可用于在运行时选择 DataTemplate 基于数据绑定属性的值。这使得多个 应用于同一类型对象的数据模板,可供选择 它们在运行时的出现。

最常见的使用

DataTemplateSelector
的场景是
ListView
CollectionView
CarouselView
。 DataTemplateSelector 用于在运行时根据数据绑定属性的值选择 DataTemplate。如果您查看官方示例,您可能会发现
OnSelectTemplate
中的
DataTemplateSelector
方法返回的是
DataTemplate
而不是
ControlTemplate
。 所以它可能不适用于这种情况。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.