Заполнение свойства типа ObservableCollection в XAML статическими ресурсами

Я создал класс, который содержит свойство типа 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]

"

Есть идеи?

2 ответа

Чтобы использовать синтаксис XAML коллекций, измените свое свойство и удалите его установщик:

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

Как и в вашем коде, каждый элемент коллекции должен быть точкой, а не ресурсом... Каждая запись списка в вашем коде xaml должна быть чем-то похожей или, возможно, попробовать somevalue или {staticResource xxx }

Но есть еще проблема. Первый синтаксис в порядке, второй может работать, если есть простой контент для Dot, но третий не может работать: тег означает "создать экземпляр Dot". И StaticResource означает "создать экземпляр.. и дать ему ключ". Так что последний синтаксис определенно не будет работать, потому что вы можете заменить экземпляр, созданный тегом, на экземпляр, поступающий из ресурса...

Но попробуйте. Основная проблема в вашем коде заключается в том, что вы пытаетесь почувствовать коллекцию Dot с Resource, которая не может работать, а компилятор не в порядке.. попробуйте использовать тег для создания записи. А затем поиграйте немного, чтобы увидеть, можете ли вы ссылаться на ресурсы где-нибудь в этих тегах

Другие вопросы по тегам