2010-03-14 74 views
1

我有一个模型中的对象列表。我希望在我的AccordianItem面板的列表中显示DTO元素。该模型是这样的:如何将列表项目从Silverlight 3工具包绑定到Accordian控件?

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 。

编辑: 我能够得到的文本在用下面的静态资源(注:硬编码图像的一些结合:我硬编码的项目[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> 

有没有一种方法来索引DataTemplate中的Items集合?此外,如何让图像在每个AccordianItem中绑定而不是硬编码?任何帮助正确的方向将不胜感激,尤其是如何绑定和放置图像的文字。

+0

既然你“还没有看到足够的银色光芒”,如果更准确地描述你希望达到的视觉效果可能会更好。另外我猜测,在你的C#源代码中,AccordianItem是指你模型中的一个类型,而不是工具包AccordianItem?最好是你用一个不同的名字是你的模型,以保持清晰。 – AnthonyWJones 2010-03-14 21:55:31

+0

你是对的。我尝试擦洗标识符以保护无辜者,但因名称冲突而结束。为了保持一致,我改变了这一点,并添加了覆盖文本的帮助请求。 – Blanthor 2010-03-15 00:12:16

回答

1

绑定到它必须与的ItemsSource =引用集合“{绑定表项}”,其中在这种情况下项目是我收集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>的控制。这里我在TextBlock控件中显示MyCollection.Title。我会用完整的代码或链接到我的博客上更新这个完整的例子。

相关问题