2012-12-23 62 views
2

我有类,它为对象选择ItemDataTemplate。但我不能在我的XAML代码中引用它。 (Page.Resources)。XAML中的命名空间错误中不存在类

这是XAML中的Items页面。类是在公共文件夹,我在这里引用的公共文件夹:

xmlns:common="using:Sample_App.Common" 

,然后当我wan't将其添加到我的XAML:

<common:MyDataTemplateSelector x:Key="Selector" AdTemplate="{StaticResource Ad}" NormalTemplate="{StaticResource Normal}"></common:MyDataTemplateSelector> 

我得到以下错误:

The name "MyDataTemplateSelector" does not exist in the namespace "using:MyDataSelector"

这里的MyDataSelector类:

namespace MyDataSelector 
{ 
    private class MyDataTemplateSelector : DataTemplateSelector 
    { 
     public DataTemplate NormalTemplate { get; set; } 

     public DataTemplate AdTemplate{ get; set; } 

     protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
     { 
      if (item is TestApp.Mainpage.NormalData) 
       return NormalTemplate 
      if (item is TestApp.Mainpage.AdData) 
       return AdTemplate; 

      return SelectTemplateCore(item, container); 
     } 
    } 
} 

回答

3

你的代码有几个问题。首先,你提到你的班级在“公共文件夹”中 - 这是完全不相关的。代码文件的位置通常与编译器无关,但您声明中的类的名称空间确实是的问题。

namespace MyDataSelector // <- This is where your class can be found 
{ 
    private class MyDataTemplateSelector : DataTemplateSelector 
    { 

如此以来,你的类是在命名空间MyDataSelector,在您的XAML文件的参考应该是这个样子:

<Page x:Class="WpfApplication1.Page1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:myDataSelector="using:MyDataSelector"> 

你会引用您的类是这样的:

<myDataSelector:MyDataTemplateSelector /> 

另一个问题是你的班级被宣布为私人。这没有意义,可能不会编译。删除private以使课程成为内部课程,或将其更改为public

相关问题