View中的XamlParseException

时间:2012-01-13 15:27:22

标签: c# silverlight mvvm prism-4 xamlparseexception

我有一个只显示标签的视图。

视图模型在视图中正确注入,因为标签的文本绑定到viewmodel属性。现在,如果我尝试在xaml中定义一个DataGrid,我有一个XamlParseException:

  

{System.Windows.Markup.XamlParseException:未找到类型'DataGrid'。 [行:16位置:45]      su System.Windows.Application.LoadComponent(Object component,Uri resourceLocator)      su Common.Views.FunctionalityView.InitializeComponent()      su Common.Views.FunctionalityView..ctor(IFunctionalityViewModel viewModel)}

但如果我在DataGrid myDg = new DataGrid()工作之前定义了InitializeComponent();

我检查了所有参考资料但仍然找不到问题。

1 个答案:

答案 0 :(得分:1)

听起来你的默认命名空间搞砸了或丢失了。没有xaml,很难说你应该做什么。

为自己解决这个问题的一种简单方法是创建一个新的UserControl,然后检查并比较其根目录上定义的xmlns名称空间和View的根元素。

WPF通过专门的命名空间定义来定位类型。它遵循格式

  

clr-namespace:[namespace](; assembly = [assembly name])

其中

  

[命名空间]

是包含类型定义的命名空间。并且,如果类型是在与xaml文件所在的程序集不同的程序集中定义的,则必须在前言中包含该部分。 [assembly name]是没有.dll扩展名的程序集的名称(例如,assembly=mscorlib将导入mscorlib.dll)。要导入Int32类型并在xaml中使用它,您必须定义命名空间

xmlns:s="clr-namespace:System;assembly=mscorlib"

还存在assembly-level attribute,允许您为程序集中的所有类型分配不同的命名空间。通常,这采用URL的形式。这是传统而非必要,IIRC。这就是为什么某些控件用更传统的命名空间标识的原因,例如

  

的xmlns = “http://schemas.microsoft.com/winfx/2006/xaml/presentation”