2014-08-31 62 views
0

我正在创建一个通用的应用程序,需要列表框中的列表框。第一个列表框显示一个包含消息的列表。有些信息附有照片,我必须添加为另一个列表。我可以用我的数据填充第一个列表框,但我无法设置第二个列表框。第一个Listbox我通过它的x:Name来设置ItemSource。第二个我不能以这种方式访问​​。我相信我对绑定有一些思考问题。c#windows应用程序列表框内的列表框绑定问题(通用应用程序手机+ pc)

这里的XAML:

<ListBox x:Name="MessageHistory" Background="#143b8a" Margin="0,0,0,101"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid Margin="5"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <Grid Grid.Column="1"> 
          <Grid.RowDefinitions> 
          </Grid.RowDefinitions> 
          <TextBlock Text="{Binding Inbox}" Margin="0,0,50,0" HorizontalAlignment="Left" TextWrapping="Wrap" FontSize="24" Foreground="WhiteSmoke" TextAlignment="Left"/> 
          <TextBlock Text="{Binding Outbox}" Margin="80,0,0,0" HorizontalAlignment="Right" TextWrapping="Wrap" FontSize="24" Foreground="Gray" TextAlignment="Right"/> 
          <!-- start of list for message photo thumbs --> 
           <ListBox ScrollViewer.HorizontalScrollBarVisibility="Auto" 
             x:Name="FirstThumbs" />         
            <ListBox.ItemsPanel> 
             <ItemsPanelTemplate> 
              <StackPanel Orientation="Horizontal" /> 
             </ItemsPanelTemplate> 
            </ListBox.ItemsPanel> 
            <ListBox.ItemTemplate> 
             <DataTemplate> 
              <Grid> 
               <Grid.ColumnDefinitions> 
                <ColumnDefinition /> 
                <ColumnDefinition /> 
               </Grid.ColumnDefinitions> 
               <Image Source="{Binding   Thumb,Mode=OneWay}" Height="90" Width="90" Stretch="UniformToFill"/> 
               <Grid Grid.Column="1"> 
                <Grid.RowDefinitions> 
                </Grid.RowDefinitions> 
               </Grid> 
              </Grid> 
             </DataTemplate> 
            </ListBox.ItemTemplate> 
           </ListBox> 
           <!-- end of list for message photo thumbs --> 
          </Grid> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

然后我有两个班。首先是MesHistory.cs:

public class MesHistory 
{ 
    public string Inbox { get; set; } 
    public string Outbox { get; set; } 
} 

第二个ThumbView.cs:

public class ThumbView 
{ 
    public string Thumb { get; set; } 
} 

第一/主列表我填充方式:

List<MesHistory> messageslist = new List<MesHistory>(); 
...foreach...{ 
MesHistory newMessage = new MesHistory(); 
newMessage.Inbox = finalmessagetext.InnerText; 
messageslist.Add(newMessage); 
} 

,然后设置的ItemsSource这样:

MessageHistory.ItemsSource = messageslist; 

List<ThumbView> newThumblist = new List<ThumbView>(); 
...foreach...{ 
ThumbView newThumb = new ThumbView(); 
newThumb.Thumb = thumbaddress.Attributes["src"].Value).ToString(); 
newThumblist.Add(newThumb); 
} 

,然后设置的ItemsSource这样不工作:

FirstThumbs.ItemsSource = newThumblist; 

VS告诉我:“当我试图同为内部的ListBox我无法通过名称设置的ItemsSource访问FirstThumbs“并不存在于当前的情况下。

我如何访问它并将数据绑定到该列表?此外,我想有可能的话那整个列表中进行选择的事件......

回答

0

1)你必须修改你的数据模型:当您创建messageslist必须填写ThumbList财产

public class MesHistory 
{ 
    public string Inbox { get; set; } 
    public string Outbox { get; set; } 

    public List<ThumbView> ThumbList {get; set;} 
} 

2)对于每个MesHistory对象:

newMessage.ThumbList = newThumblist 

3)修改项模板在XAML这样的:

<!-- start of list for message photo thumbs --> 
          <ListBox ScrollViewer.HorizontalScrollBarVisibility="Auto" 
            ItemSource="{Binding ThumbList}" 
            x:Name="FirstThumbs" />         
           <ListBox.ItemsPanel> 
            <ItemsPanelTemplate> 
             <StackPanel Orientation="Horizontal" /> 
            </ItemsPanelTemplate> 
           </ListBox.ItemsPanel> 
           <ListBox.ItemTemplate> 
            <DataTemplate> 
             <Grid> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition /> 
               <ColumnDefinition /> 
              </Grid.ColumnDefinitions> 
              <Image Source="{Binding Thumb}" 
                Height="90" Width="90" Stretch="UniformToFill"/> 
              <Grid Grid.Column="1"> 
               <Grid.RowDefinitions> 
               </Grid.RowDefinitions> 
              </Grid> 
             </Grid> 
            </DataTemplate> 
           </ListBox.ItemTemplate> 
          </ListBox> 
          <!-- end of list for message photo thumbs -->  

4)您无法获得整个列表的选择事件。只需将它添加到主列表框和到列表框控件的ItemTemplate里面

1

尝试,

有其收集父列表框中选择一个视图模型。在该集合中有一个辅助集合来绑定子列表框的itemssource。

存在于父列表框中的每个项目都是datacontext到相应的子列表框。

我已经为这种情况准备了一个示例。 请在 http://1drv.ms/1qztFgh找到样品。

希望这可以帮助你。

相关问题