我一直在玩XAML中声明对象。我在Silverlight程序集中有这些类:
public class TextItem
{
public string TheValue { get; set; }
}
public class TextItemCollection
{
public ObservableCollection<TextItem> TextItems { get; set; }
}
然后,我在我的XAML中有这个:
<UserControl.Resources>
<app:TextItemCollection x:Key="TextItemsResource">
<app:TextItemCollection.TextItems>
<app:TextItem TheValue="Hello world I am one of the text values"/>
<app:TextItem TheValue="And I am another one of those text items"/>
<app:TextItem TheValue="And I am yet a third!"/>
</app:TextItemCollection.TextItems>
</app:TextItemCollection>
</UserControl.Resources>
出于某种原因,如果我在尝试调试应用程序时包含该节点,Silverlight会挂起(我只看到旋转的蓝色加载圈)。如果我注释掉该节点,它会立即运行。
有什么想法吗?
答案 0 :(得分:6)
通过代码审查:您的TextItems属性为null。这无法帮助XAML解析器。
通过实验结果:在调试器中运行应用程序时出现异常(我使用的是Silverlight 4):
System.Windows.Markup.XamlParseException occurred
Message=Collection property '__implicit_items' is null. [Line: 12 Position: 40]
LineNumber=12
LinePosition=40
StackTrace:
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
InnerException:
您应该初始化TextItems。你也应该将setter设为私有,以免其他人搞砸你。试试这个,你应该会发现它运行良好:
public class TextItemCollection
{
public TextItemCollection()
{
TextItems = new ObservableCollection<TextItem>();
}
public ObservableCollection<TextItem> TextItems { get; private set; }
}