在我的prism模块中,我有以下代码片段:
using (var manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssembly.CaseHost.ViewModelDataTemplates.xaml"))
{
ParserContext context = new ParserContext();
context.XmlnsDictionary.Add("local", "clr-namespace:MyAssembly.CaseHost");
var resourceDictionary = (ResourceDictionary)XamlReader.Load(manifestResourceStream, context);
_resourceRegistry.Add(resourceDictionary);
}
我基本上是在尝试加载这个非常简单的ResourceDictionary:
<DataTemplate DataType="{x:Type local:PlayPauseViewModel}">
<Label>Look mom!</Label>
</DataTemplate>
这给了我以下例外:
类型引用找不到名为“PlayPauseViewModel”的公共类型。
这是一个cpp / winforms / wpf应用程序的野兽,所以我不能使用URI。我怎么解决这个问题?
答案 0 :(得分:3)
发现它!
问题是如何在DataTemplate中指定命名空间:
标准定义(不起作用):
xmlns:local="clr-namespace:<Namespace>"
更明确的定义(工作!)
xmlns:local="clr-namespace:<Namespace>;assembly=<assembly>"
替换&lt;&gt;使用命名空间和程序集。
答案 1 :(得分:2)
但是如果你在同一个程序集中有这个代码该怎么办? 您不能使用
xmlns:local="clr-namespace:<Namespace>;assembly=<assembly>"
有?