我正在尝试做Xamarin.Forms ListView的一个非常常见的用法,其中我有多种类型的项目。
我正在使用DataTemplateSelector并在我的XAML文件中定义不同的(此时是两个)视图。这需要通过命名空间定义从XAML代码引用c#代码。这就是我被卡住的地方。
我得到的错误是
XFC0000 Cannot resolve type "local:NodeTemplateSelector".下面是我的XAML,简而言之:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
...
xmlns:local="clr-namespace:varlist">
<ContentPage.Resources>
<ResourceDictionary>
<DataTemplate x:Key="NoteItem">
...
</DataTemplate>
<local:NodeTemplateSelector x:Key="NodeTemplateKey">
NoteTemplate = "{StaticResource NoteItem}"
ImageTemplate = "{StaticResource ImageItem}"
</local:NodeTemplateSelector>
</ResourceDictionary>
</ContentPage.Resources>
</ContentPage>下面是C#,也是经过压缩的:
namespace varlist
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ListViewPage : ContentPage
{
...
public class NodeTemplateSelector : DataTemplateSelector
{
public DataTemplate NoteTemplate { get; set; }
public DataTemplate ImageTemplate { get; set; }
protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
{
ListView list = (ListView)container;
if (item is NoteData)
return NoteTemplate;
else // item is ImageData
return ImageTemplate;
}
}
}
}我需要做什么更改才能让XAML识别NodeTemplateSelector?
发布于 2020-11-11 06:05:51
正如Jason和Shaw建议的那样,NodeTemplateSelector必须是顶级的。
另外,我遇到的另一个问题是DataTemplate XAML文件中的语法。不妨加上这条注释,以防其他人遇到同样的问题:
XAML中的NodeTemplateSelector必须定义为直接内容;必须如下所示:
<local:NodeTemplateSelector
x:Key="NodeTemplate"
NoteItemTemplate="{StaticResource NoteTemplate}"
ImageItemTemplate="{StaticResource ImageTemplate}"
/>否则你会得到一个无法辨别的运行时错误。
https://stackoverflow.com/questions/64772819
复制相似问题