首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xamarin数据平台选择器:无效的XAML名称

xamarin数据平台选择器:无效的XAML名称
EN

Stack Overflow用户
提问于 2020-11-11 00:29:10
回答 1查看 103关注 0票数 0

我正在尝试做Xamarin.Forms ListView的一个非常常见的用法,其中我有多种类型的项目。

我正在使用DataTemplateSelector并在我的XAML文件中定义不同的(此时是两个)视图。这需要通过命名空间定义从XAML代码引用c#代码。这就是我被卡住的地方。

我得到的错误是

代码语言:javascript
复制
XFC0000 Cannot resolve type "local:NodeTemplateSelector".

下面是我的XAML,简而言之:

代码语言:javascript
复制
<?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#,也是经过压缩的:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-11 06:05:51

正如Jason和Shaw建议的那样,NodeTemplateSelector必须是顶级的。

另外,我遇到的另一个问题是DataTemplate XAML文件中的语法。不妨加上这条注释,以防其他人遇到同样的问题:

XAML中的NodeTemplateSelector必须定义为直接内容;必须如下所示:

代码语言:javascript
复制
  <local:NodeTemplateSelector 
    x:Key="NodeTemplate"
    NoteItemTemplate="{StaticResource NoteTemplate}"
    ImageItemTemplate="{StaticResource ImageTemplate}"
  />

否则你会得到一个无法辨别的运行时错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64772819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档