如何解决xamarin datatemplateselector:无效的XAML名称
我正在尝试使用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?
解决方法
正如Jason和Shaw所建议的那样,NodeTemplateSelector必须在顶级类中。
此外,我遇到的另一个问题是DataTemplate XAML文件中的语法。如果其他人遇到同样的麻烦,也可以添加此注释:
XAML中的NodeTemplateSelector必须定义为直接内容;必须是这样的:
def add_item(self,item_name: str,*args,**kwargs):
"""Add item to this group.
__________
Parameters
item_name : `str`
The new item's name.
args : `tuple`
The list of item fields to return.
kwargs : `dict`
Optional keyword arguments for adding an item to this group.
否则,您将获得一个难以理解的运行时错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。