Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Silverlight 4.0 使用静态资源填充XAML中ObservableCollection类型的属性_Silverlight 4.0_C# 4.0_Observablecollection_Staticresource - Fatal编程技术网

Silverlight 4.0 使用静态资源填充XAML中ObservableCollection类型的属性

Silverlight 4.0 使用静态资源填充XAML中ObservableCollection类型的属性,silverlight-4.0,c#-4.0,observablecollection,staticresource,Silverlight 4.0,C# 4.0,Observablecollection,Staticresource,我创建了一个包含ObservableCollection类型属性的类。我试图在XAML中创建该类的实例,并用成员填充该属性。我一直得到一个异常,即类T不能转换为ObservableCollection,但只有当我试图用声明为静态资源的元素填充列表时,才会发生此异常 有人知道为什么吗 代码如下: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmln

我创建了一个包含ObservableCollection类型属性的类。我试图在XAML中创建该类的实例,并用成员填充该属性。我一直得到一个异常,即类T不能转换为ObservableCollection,但只有当我试图用声明为静态资源的元素填充列表时,才会发生此异常

有人知道为什么吗

代码如下:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mseg="clr-namespace:SegApp.Model.DataEntities.Segments;assembly=SegApp.Model.Silverlight">

                         <mseg:Dot xKey="d1"/>
                         <mseg:Dot xKey="d2"/>
                         <mseg:Dot xKey="d3"/>
                         <mseg:Dot xKey="d4"/>

                         <mseg:Segment xKey="seg1">
                             <mseg:Segment.Dots>
                                    <StaticResource ResourceKey="d1"/>
                                    <StaticResource ResourceKey="d2"/>
                                    <StaticResource ResourceKey="d3"/>
                                    <StaticResource ResourceKey="d4"/>
                             </mseg:Segment.Dots>
                         </mseg:Segment>
</ResourceDictionary>
类别定义为:

public class Segment : Part
{
    public ObservableCollection<Dot> Dots { get; set; }

    public Segment()
    {
        Dots = new ObservableCollection<Dot>();
    }
}
例外情况是:

无法创建类型为bla.bla.bla.Dot的对象 转换为类型 System.Collections.ObjectModel.ObservableCollection'1[bla.bla.bla.Dot]


有什么想法吗?

正如您的代码一样,集合中的每个元素都必须是一个点,而不是一个资源。。。 xaml代码中列表的每个条目都必须类似于 或者试试看 一些价值 或 {staticResource xxx}

但仍然存在一个问题。第一种语法可以,第二种语法可以在Dot有简单内容的情况下使用,但第三种语法不能运行:tag表示创建Dot的实例。StaticResource意味着创建..的实例。。给它一把钥匙。 所以最后一个语法肯定不起作用,因为您可以用来自资源的实例替换由标记创建的实例


但是试试看。代码中的主要问题是,您试图用资源来感受一个点集合,它无法工作,编译器也不正常。。尝试使用标记创建条目。然后播放一段,看看是否可以引用这些标记中的某个地方的资源。

为了使用集合XAML语法,请更改属性并删除其setter:

public class Segment : DependencyObject
{
    private readonly ObservableCollection<Dot> _dots = new ObservableCollection<Dot>();
    public ObservableCollection<Dot> Dots
    {
        get { return _dots; }
    }
}