我为每个平台都有自定义布局和自定义单元格渲染器。
自定义单元格:
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,但是没有用。