如何在自定义控件中使用自定义单元格渲染器

时间:2018-10-17 15:24:07

标签: c# xamarin.forms

我为每个平台都有自定义布局和自定义单元格渲染器。

自定义单元格:

public class NativeCell : ViewCell
{
    public static readonly BindableProperty TitleProperty =
        BindableProperty.Create(nameof(Title), typeof(string), typeof(MenuItemNativeCell), "");

    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
}

简单的UWP渲染器:

public class NativeCellRenderer : ViewCellRenderer
{
    public override Windows.UI.Xaml.DataTemplate GetTemplate(Cell cell)
    {
        return App.Current.Resources["MenuItemTemplate"] as Windows.UI.Xaml.DataTemplate;
    }
}

UWP项目中的数据模板:

<DataTemplate x:Key="MenuItemTemplate">
    <Grid x:Name="Grid" Margin="5">
        <Grid Margin="3"
              Padding="20"
              Background="Black">
            <Image Source="{Binding Title, Converter={StaticResource ImagePlaceholderConverter}}"/>
        </Grid>
    </Grid>
</DataTemplate>

以自定义布局创建单元格时, viewCell.View 为空。

    private ViewCell CreateViewCell(object item)
    {
        ViewCell viewCell;

        if (ItemTemplate is DataTemplateSelector templateSelector)
        {
            var template = templateSelector.SelectTemplate(item, null);
            viewCell = template.CreateContent() as ViewCell;
        }
        else
        {
            viewCell = ItemTemplate.CreateContent() as ViewCell;
        }

        viewCell.View.BindingContext = item;

        return viewCell;
    }

如何解决此问题? 自定义布局是使用xamarin.forms编写的,没有渲染器。 您可以看到布局源here

UPD : 使用断点,我发现未调用渲染器中的函数GetTemplate。我试图用NativeCell代替ViewCell,但是没有用。

0 个答案:

没有答案