0

我创建了一个包含 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] 类型

"

有任何想法吗?

4

2 回答 2

0

为了使用集合 XAML 语法更改您的属性并删除它的设置器:

public class Segment : DependencyObject
{
    private readonly ObservableCollection<Dot> _dots = new ObservableCollection<Dot>();
    public ObservableCollection<Dot> Dots
    {
        get { return _dots; }
    }
}
于 2011-02-28T22:55:03.537 回答
0

与您的代码一样,集合的每个元素都必须是点,而不是资源... xaml 代码中列表的每个条目都必须类似于或尝试 somevalue 或 {staticResource xxx }

但是还有一个问题。第一种语法是可以的,如果有简单的 Dot 内容,第二种可以工作,但第 3 种不能运行:标签意味着“创建一个 Dot 的实例”。而 StaticResource 的意思是“创建一个……的实例并给它一个键”。所以最后一个语法肯定不起作用,因为您可以用来自资源的实例替换标签创建的实例......

但是试一试。您的代码中的主要问题是您试图感受带有资源的 Dot 集合,它无法工作并且编译器也无法正常工作。尝试使用标签创建条目。然后玩一下看看你是否可以在这些标签的某个地方引用资源..

于 2011-02-28T21:58:57.133 回答