Как привязать элементы списка к элементу управления Accordian из набора инструментов Silverlight 3? - PullRequest
1 голос
/ 14 марта 2010

У меня есть список объектов в модели. Я хочу показать элементы 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 и наложить длинное описание на часть изображения.

Если я жестко закодирую его, я могу получить изображение в 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 (ПРИМЕЧАНИЕ: я жестко кодирую элементы [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? Кроме того, как мне заставить Image связывать, а не жестко кодировать их в каждом AccordianItem? Буду признателен за любую помощь в правильном направлении, особенно в том, как связать текст поверх изображения.

1 Ответ

1 голос
/ 22 марта 2010

Для привязки к коллекции на нее должна ссылаться 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. Я обновлю его полным кодом или ссылкой на свой блог для полного примера позже.

...