Заполнение свойства типа ObservableCollection в XAML статическими ресурсами - PullRequest
0 голосов
/ 15 февраля 2011

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

0 голосов
/ 01 марта 2011

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

public class Segment : DependencyObject
{
    private readonly ObservableCollection<Dot> _dots = new ObservableCollection<Dot>();
    public ObservableCollection<Dot> Dots
    {
        get { return _dots; }
    }
}
0 голосов
/ 01 марта 2011

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

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

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

...