2014-08-31 66 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找到樣品。

希望這可以幫助你。

相關問題