在XAML中声明的集合会挂起Silverlight

时间:2010-08-05 18:31:49

标签: silverlight xaml

我一直在玩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会挂起(我只看到旋转的蓝色加载圈)。如果我注释掉该节点,它会立即运行。

有什么想法吗?

1 个答案:

答案 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; }
}