xamarin datatemplateselector:无效的XAML名称
我正在尝试使用Xamarin.Forms ListView的一个非常常见的用法,在这里我有多种类型的项 我正在使用DataTemplateSelector并在XAML文件中定义不同的(目前有两个)视图。这需要通过名称空间定义从XAML代码中引用c#代码。这就是我被困的地方 我得到的错误是xamarin datatemplateselector:无效的XAML名称,xaml,xamarin.forms,datatemplateselector,Xaml,Xamarin.forms,Datatemplateselector,我正在尝试使用Xamarin.Forms ListView的一个非常常见的用法,在这里我有多种类型的项 我正在使用DataTemplateSelector并在XAML文件中定义不同的(目前有两个)视图。这需要通过名称空间定义从XAML代码中引用c#代码。这就是我被困的地方 我得到的错误是 XFC0000 Cannot resolve type "local:NodeTemplateSelector". 这是我的XAML,浓缩版: <?xml version="
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>
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,我需要做哪些更改?正如Jason和Shaw所建议的,NodeTemplateSelector必须在顶级类中 另外,我遇到的另一个问题是DataTemplate XAML文件中的语法。如果其他人也有同样的问题,不妨添加此注释: XAML中的NodeTemplateSelector必须定义为直接内容;必须是这样的:
<local:NodeTemplateSelector
x:Key="NodeTemplate"
NoteItemTemplate="{StaticResource NoteTemplate}"
ImageItemTemplate="{StaticResource ImageTemplate}"
/>
否则会出现一个无法解释的运行时错误。为什么
NodeTemplateSelector
在类ListViewPage
中?我想我是在遵循一个来自MS的示例。这是隐藏符号吗?它被声明为公共的。正如Jason所说,尝试在一个新的类文件中创建选择器类。是的,这解决了问题。谢谢