0

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

viewmodel 被正确注入到视图中,因为标签的文本绑定到 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();

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

4

1 回答 1

1

听起来您的默认命名空间混乱或丢失。如果没有 xaml,很难说出您应该做什么。

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

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

clr-命名空间:[命名空间](;程序集=[程序集名称])

在哪里

[命名空间]

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

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

还有一个程序集级属性,它允许您为程序集中的所有类型分配不同的命名空间。通常,这采用 URL 的形式。这是传统而不是必然,IIRC。这就是为什么某些控件使用更传统的命名空间来标识的原因,例如

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

于 2012-01-16T15:53:26.907 回答