Как привязать элементы списка к элементу управления Accordian из набора инструментов Silverlight 3?

У меня есть список объектов в модели. Я хочу показать элементы DTO в списке на моих панелях AccordianItem. Модель такая:

public class MyModel 
{ 
    public List<AnimalDTO> Items { get; set; } 

    public MyModel() 
    { 
        Items = new List<AnimalDTO> 
                    { 
                        new AnimalDTO() {Title = "Monkey", ImageUri = "Images/monkey.jpg"}, 
                        new AnimalDTO() {Title = "Cow", ImageUri = "Images/cow.jpg"}, 
                    }; 
    } 
} 
public class AnimalDTO
{
    public string Title { get; set; }
    public string LongDescription { get; set; }
    public string ImageUri { get; set; }
    public string NavigateUri { get; set; }
}

Я хочу показать изображение на фоновом изображении AccordianItems и наложить LongDescription на часть изображения.

Если я жестко закодирую это, я смогу получить изображение в AccordianItem, таким образом...

<layoutToolkit:AccordionItem x:Name="Item2" Header="Item 2" Margin="0,0,10,0" AccordionButtonStyle="{StaticResource AccordionButtonStyle1}" ExpandableContentControlStyle="{StaticResource ExpandableContentControlStyle1}" HeaderTemplate="{StaticResource DataTemplate1}" BorderBrush="{x:Null}" ContentTemplate="{StaticResource CarouselContentTemplate}">
                <layoutToolkit:AccordionItem.Background>
                    <ImageBrush ImageSource="Images/cow.jpg" Stretch="None"/>
                </layoutToolkit:AccordionItem.Background>
            </layoutToolkit:AccordionItem>

Когда я пробую это с привязкой, такой как <ImageBrush ImageSource="{Binding Path={StaticResource MyContentTemplate.ImageUri}}" Stretch="None"/>, или если я пытаюсь это сделать с <ImageBrush ImageSource="{Binding Path=Items[0].ImageUri}" Stretch="None"/>, он выдает XamlParseException.

Редактировать: я могу получить некоторую привязку текста к жестко закодированным изображениям со следующим StaticResource (ПРИМЕЧАНИЕ: я жестко кодирую Items[2], я не уверен, как индексируй это)

        <DataTemplate x:Key="CarouselContentTemplate">
        <Grid Width="650" Height="420">
            <Grid.RowDefinitions>
                <RowDefinition Height="0.476*"/>
                <RowDefinition Height="0.524*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="150" />
            </Grid.ColumnDefinitions>

            <TextBlock Grid.Row="0" Grid.Column="0"
                   x:Name="Title" 
                   Text="{Binding Items[2].Title}" 
                   Foreground="Black" FontSize="12"></TextBlock>
            <TextBlock Grid.Row="1" Grid.Column="0"
                   x:Name="LongDescription" 
                   Text="{Binding Items[2].LongDescription}"
                   TextWrapping="Wrap"FontSize="8"></TextBlock>
        </Grid>
    </DataTemplate>

Есть ли способ проиндексировать коллекцию Items в DataTemplate? Кроме того, как мне заставить изображение привязываться, а не жестко кодировать их в каждом AccordianItem? Будем признательны за любую помощь в правильном направлении, особенно в том, как связать и наложить текст на изображение.


person Blanthor    schedule 14.03.2010    source источник
comment
Поскольку вы еще не видели достаточного количества серебряного света, было бы лучше более точно описать визуальные результаты, которых вы хотите достичь. Также я предполагаю, что в вашем источнике С# AccordianItem относится к типу вашей модели, а не к инструментарию AccordianItem? Было бы лучше, если бы вы использовали другое имя для вашей модели, чтобы это было ясно.   -  person AnthonyWJones    schedule 15.03.2010
comment
Вы правы. Я попытался стереть идентификаторы, чтобы защитить невиновных, но столкнулся с конфликтом имен. Я изменил это, чтобы быть последовательным, и добавил запрос о помощи по наложению текста.   -  person Blanthor    schedule 15.03.2010


Ответы (1)


Для привязки к коллекции на нее нужно ссылаться с помощью ItemsSource="{Binding Items}", где в данном случае Items — это моя коллекция MyModel.Items. >

<layoutToolkit:Accordion
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
        ExpandDirection="Right" 
        Style="{StaticResource AccordionStyle1}"
        AccordionButtonStyle="{StaticResource AccordionButtonStyle1}"
         MaxHeight="420" MaxWidth="800" 
         ItemsSource="{Binding Items}" Margin="8,0,-8,-12" Grid.Row="3"
        >
        <layoutToolkit:Accordion.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Title}"></TextBlock>
            </DataTemplate>
        </layoutToolkit:Accordion.ItemTemplate>

Обратите внимание, что коллекция должна быть связана с ItemsSource, который является множественным числом в качестве мнемоники. и отдельные члены элементов связаны в пределах управления <layoutToolkit:Accordian.ItemTemplate> Здесь я показываю MyCollection.Title в элементе управления TextBlock. Я обновлю это полным кодом или ссылкой на мой блог для полного примера позже.

person Blanthor    schedule 22.03.2010