Я получаю это исключение при попытке отладки приложения Silverlight 4 в Visual Studio 2010. Исключение будет вызвано после того, как оно пройдет строку InitializeComponent()
. Исключение произойдет только во время отладки, но, похоже, это не проблема для Visual Studio Designer.
System.Windows.Markup.XamlParseException occurred
Message=Failed to create a 'System.Type' from the text 'local:CustomerEntity'. [Line: 11 Position: 59]
LineNumber=11
LinePosition=59
StackTrace:
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at TestSilverlightApp.MainPage.InitializeComponent()
at TestSilverlightApp.MainPage..ctor()
InnerException:
Итак, что я пытаюсь сделать: у меня есть созданный класс ViewModel
, который имеет свойство EntityType
типа System.Type
, которому будет присвоено значение в XAML.
Я создал новый минимальный проект, который будет воспроизводить ту же проблему, см. Ниже.
MainPage.xaml
Это RootVisual
для приложения Silverlight. ViewModel
с присвоенным EntityType
объявлен в UserControl.Resources
.
Я также связал ViewModel
с DataContext
и специально создал элемент Run
в теле, который связан с параметром EntityType
. В Visual Studio Designer не возникает проблем с отображением имени типа назначенного EntityType
.
Ошибка не возникнет, если я не установил параметр EntityType
в XAML.
<UserControl x:Class="TestSilverlightApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestSilverlightApp"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<local:ViewModel x:Key="rootViewModel" EntityType="local:CustomerEntity" />
</UserControl.Resources>
<StackPanel x:Name="LayoutRoot" DataContext="{StaticResource rootViewModel}">
<TextBlock><Run Text="{Binding EntityType}" /></TextBlock>
</StackPanel>
</UserControl>
MainPage.xaml.cs
Это исключение будет сгенерировано после прохождения строки InitializeComponent()
ниже.
namespace TestSilverlightApp
{
public partial class MainPage : System.Windows.Controls.UserControl
{
public MainPage()
{
InitializeComponent();
}
}
}
ViewModel.cs
Класс ViewModel имеет свойство EntityType, которое принимает значение System.Type
.
namespace TestSilverlightApp
{
public class ViewModel
{
public System.Type EntityType { get; set; }
}
}
CustomerEntity.cs
Это просто пустой класс, который я создал с целью присвоения его Типа свойству ViewModel.EntityType.
namespace TestSilverlightApp
{
public class CustomerEntity
{ }
}
Любая идея о том, как я могу это исправить? Я предпочитаю не реализовывать свой собственный TypeConverter
или что-то другое для установки значения System.Type
в XAML.