我有这个方法调用:
public DataTemplate Create(Type type, string propertyName)
{
string str = @"<DataTemplate xmlns=""http://schemas.microsoft.com/client/2007"" xmlns:local=""clr-namespace:MyProjectName;assembly:MyProjectName""><StackPanel Orientation=""Horizontal""><TextBlock Text=""{Binding propertyLabel}"" FontStyle=""Italic"" Width=""120"" /><TextBox Text=""{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:MainPage}, Path=DataContext.Value1}"" Width=""120"" /></StackPanel></DataTemplate>";
DataTemplate _dt = (DataTemplate)XamlReader.Load(str);
return _dt;
}
在调用这个时我得到下一个错误:
行:56
错误:Silverlight应用程序中的未处理错误
代码:2512
类别:ParserError
消息:无法从文本“local:MainPage”创建“System.Type”
文件:
行:1
位置:253
情景是这样的:
网格 - &gt; DataContext = ViewModel ListBox - &gt; ItemsSource = ViewModel.MyCollection ListBoxItem - &gt; DataTemaplate包含{ViewModel.MyCollection.propertyLabel和ViewModel.Value1}
发生了什么事?为什么我会收到此错误?任何想法都非常受欢迎。
感谢。
答案 0 :(得分:1)
我也无法使用'clr-namespace:...'命名空间声明来解决这个问题。我必须做的是使用XmlnsDefintionAttribute在我的代码中声明一个xml定义映射。放置此属性的一个方便的位置是AssemblyInfo.cs。不要将它放在命名空间块中。
[assembly: XmlnsDefinition(
"http://www.yourcompany.com/yourproduct/yourcomponent",
"MyProductName")] // substitute with your own namespace
然后,您必须使用“xmlns:local”XML属性中的URL替换clr-namespace(下面示例中的第3行)
string str = @"<DataTemplate
xmlns=""http://schemas.microsoft.com/client/2007""
xmlns:local=""http://www.yourcompany.com/yourproduct/yourcomponent"">
<StackPanel Orientation=""Horizontal"">
<TextBlock Text=""{Binding propertyLabel}"" FontStyle=""Italic"" Width=""120"" />
<TextBox
Text=""{Binding DataContext.Value1
RelativeSource={RelativeSource FindAncestor, AncestorType=local:MainPage} }""
Width=""120"" />
</StackPanel>
</DataTemplate>";