Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XAML中声明的集合挂起Silverlight_Silverlight_Xaml - Fatal编程技术网

XAML中声明的集合挂起Silverlight

XAML中声明的集合挂起Silverlight,silverlight,xaml,Silverlight,Xaml,我一直在玩用XAML声明对象的游戏。我的Silverlight程序集中有以下类: public class TextItem { public string TheValue { get; set; } } public class TextItemCollection { public ObservableCollection<TextItem> TextItems { get; set; } } 公共类TextItem { 公共字符串值{get;set;} }

我一直在玩用XAML声明对象的游戏。我的Silverlight程序集中有以下类:

public class TextItem
{
    public string TheValue { get; set; }
}

public class TextItemCollection
{
    public ObservableCollection<TextItem> TextItems { get; set; }
}
公共类TextItem
{
公共字符串值{get;set;}
}
公共类TextItemCollection
{
公共ObservableCollection 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将挂起(我只看到旋转的蓝色加载循环)。如果我注释掉那个节点,它会立即运行


有什么想法吗?

通过代码检查:您的TextItems属性为空。这对XAML解析器没有帮助

根据实验结果:在调试器中运行应用程序时出现异常(我使用的是Silverlight 4):

您应该初始化TextItems。你也应该把二传者保密,这样别人就不会把你搞砸了。试试这个,你会发现它很好用:

public class TextItemCollection
{
    public TextItemCollection()
    {
        TextItems = new ObservableCollection<TextItem>();
    }

    public ObservableCollection<TextItem> TextItems { get; private set; }
}
公共类TextItemCollection
{
公共TextItemCollection()
{
TextItems=新的ObservableCollection();
}
public observeCollection TextItems{get;private set;}
}

您是否尝试过在App.xaml中未处理的异常处理程序中放置断点?VS将错过SL应用程序某些部分的异常,但如果在应用程序开始时中断。UnhandledException处理程序,您将能够看到正在抛出的异常。好主意。但不,它只是旋转,我从来没有达到断点。谢谢你的信息。那么在XAML中就没有办法做到这一点了吗?我试图避免代码隐藏。这主要是一个实践XAML的思想实验,而不是实际的生产问题。将我的TextItemCollection替换为您的,您的资源标记应该可以工作。我并不是建议您在代码隐藏中这样做;你不需要,明白了。我明白你在说什么了。不幸的是,我已经完全超越了那个例子,所以我不能再重现这个问题了。但我相信你的回答,因为这可能就是答案。
public class TextItemCollection
{
    public TextItemCollection()
    {
        TextItems = new ObservableCollection<TextItem>();
    }

    public ObservableCollection<TextItem> TextItems { get; private set; }
}