XML命名空间clr-namespace:XXX中不存在标记'ViewModelLocator'

时间:2013-08-15 16:57:36

标签: c# windows-phone-8 portable-class-library

我尝试了许多其他解决方案但没有取得任何成功。我有一个名为ViewModelLocator的类,它位于我的便携式类库中。它有一个名为ViewModels的属性,类型为Dictionay<K, V>

然后我有一个引用便携式类库的Windows Phone 8项目。我在WP8 app.xaml中添加了以下内容:

<Application
    x:Class="Kaizen.WP8.Test.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:test="clr-namespace:Foo.Core.Portable.ViewModel;assembly=Foo.Core.Portable">
    <Application.Resources>

        <test:ViewModelLocator x:Key="ViewModelLocator">
            <test:ViewModelLocator.ViewModels>
                <test:SampleViewModel x:Key="sampleVM"/>
            </test:ViewModelLocator.ViewModels>
        </test:ViewModelLocator>
    </Application.Resources>
</Application>

当我在标签上按F12时,它会导航到我的pcl中的正确类和/或属性。这表明VS知道对象,但是当我尝试构建时,我收到以下错误:

  

XML命名空间中不存在标记“ViewModelLocator”   'CLR-名称空间:Foo.Core.Portable.ViewModel;装配= Foo.Core.Portable'

     

XML名称空间中不存在标记“SampleViewModel”   'CLR-名称空间:Foo.Core.Portable.ViewModel;装配= Foo.Core.Portable'

有人可以提供一些帮助吗?

[更新] 我在我的pcl项目中引用了mvvm light的pcl版本。这就是ViewModelLocator类的样子:

public class ViewModelLocator
{
    public dynamic this[string viewModelName]
    {
        get
        {
            if (this.ViewModels.ContainsKey(viewModelName))
            {
                return this.ViewModels[viewModelName];
            }

            else
            {
                return null;
            }
        }
    }

    public Dictionary<string, ViewModelBase> ViewModels { get; set; }

    public ViewModelLocator()
    {
        this.ViewModels = new Dictionary<string, ViewModelBase>();
    }
}

我的WP8项目也使用了mvvm light pcl程序集。我注意到,如果我使用ViewModelBase类作为字典值,那么当我得到错误时。这是因为在两个项目之间使用mvvm light pcl存在问题?! 的 [更新]

非常感谢提前!! 亲切的问候,

3 个答案:

答案 0 :(得分:4)

我刚刚遇到.Net 4.5项目的这个问题。 我的解决方案是更改为.Net 4.0,忽略警告,然后更改回.Net 4.5。 然后问题就消失了。

不知道这对其他人是否可行,但对我有用。

最好的问候。

答案 1 :(得分:2)

好的,所以我不确定我在第一次尝试时做错了什么,但是我重新创建了解决方案并执行了或多或少相同的步骤,我没有再收到错误?! O_O

答案 2 :(得分:0)

我知道这有点晚了但我在使用WPF桌面应用程序和控件库时遇到了同样的问题。该库的默认目标框架是.Net 4,但我在Visual Studio中创建后的桌面应用程序默认情况下是使用.Net 4客户端配置文件创建的。我将桌面应用程序从.Net 4客户端配置文件更改为.Net 4并且工作正常。