2016-10-14 74 views
0

我想让一个ListView同时显示一个图像和所选图像的名称。到目前为止,我已成功将List<BitmapImage>绑定到ListView.ItemsSource,它在ItemTemplate内同时显示Image元素和Textblock元素,我还成功地将每个Image的名称添加到单独的List<string>。现在,这是我卡住的地方,我如何将List<BitmapImage>List<string>绑定到单个ListView,因此每个List Item的尊重字段。将两个不同类型的列表链接到一个ListView

代码片段如下:

XAML ListView控件:

<ListView x:Name="listView_ViewPhotos" Visibility="Collapsed"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="0,5,0,5"> 
       <Grid.ColumnDefinitions> 
        <!--Image Column--> 
        <ColumnDefinition Width="150"/> 
        <!--Name Column--> 
        <ColumnDefinition MinWidth="{Binding ActualWidth, ElementName=pageRoot, Mode=OneWay}"/> 
       </Grid.ColumnDefinitions> 
       <Image Source="{Binding ImageList}" Height="100" Width="150" Stretch="UniformToFill" Grid.Column="0"/> 
       <TextBlock x:Name="txt_Listimg_Caption" Foreground="{ThemeResource ButtonForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="WrapWholeWords" Height="40" Margin="15,0,15,0" FontSize="25" Text="{Binding ImageName}" Grid.Column="1" /> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

C#

public List<string> ImageName = new List<string>(); 
private async void appBar_GetFiles_Click(object sender, RoutedEventArgs e) 
{ 
    FileOpenPicker filePicker = new FileOpenPicker(); 
    filePicker.ViewMode = PickerViewMode.List; 
    filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
    filePicker.FileTypeFilter.Add(".bmp"); 
    filePicker.FileTypeFilter.Add(".png"); 
    filePicker.FileTypeFilter.Add(".gif"); 
    filePicker.FileTypeFilter.Add(".jpg"); 
    filePicker.FileTypeFilter.Add(".jpeg"); 

    IReadOnlyList<StorageFile> filelist = await filePicker.PickMultipleFilesAsync(); 
    foreach (var file in filelist) 
    { 
     if (file != null) 
     { 
      string FileName = file.Name; 
      //var imageData = await activeFolder.GetFileAsync(FileName); 
      //var imageData = await KnownFolders.PicturesLibrary.GetFileAsync(FileName); 
      BitmapImage bitmapImage; 
      using (var stream = await file.OpenAsync(FileAccessMode.Read)) 
      { 
       bitmapImage = new BitmapImage(); 
       bitmapImage.SetSource(stream); 
      } 
      ImageName.Add(FileName); 
      ImageList.Add(bitmapImage); 
     } 
     else break; 
    } 
    listView_ViewPhotos.ItemsSource = null; 
    listView_ViewPhotos.ItemsSource = ???; 

    gridView_ViewPhotos.ItemsSource = null; 
    gridView_ViewPhotos.ItemsSource = ???; 
+0

您需要创建一个具有两个属性('Image'和'ImageName')的类。然后是List类而不是两个单独的List,最后将ItemsSource设置为List。如何创建一个类和一个'List'它的例子http://stackoverflow.com/a/32285112/2946329 –

回答

0

而不是2所列出,只需要使用1:

1,创建一个新的我们称之为ImageDetails。 该类包含2个属性,1是图像本身,图1是图像的名字

public class ImageDetails 
{ 
    public BitmapImage Image{get;set:} 
    public string ImageName{get;set;} 
} 

所以,现在,你不是装2列出,只需拨打List<ImageDetails>

举例地址:

List<ImageDetails> list = new List<ImageDetails>(); 
ImageDetails _imgDetails = new ImageDetails(); 
_imgDetails.Image = bitmapImage; 
_imgDetails.ImageName = FileName; 
list.Add(_imgDetails); 

示例GETALL:

foreach(var img in list) 
{ 
    var image = img.Image; //this is your BitmapImage 
    var name = img.ImageName; //this is your image Name 
    //other work 
} 
+0

这工作正如我所希望的!我原本有一个ImageDetails类,类似于你所概述的ImageDetails类,但我放弃了它,因为我认为它是一个死胡同。原来我错了,谢谢! – Haybale100

+0

@ Haybale100很高兴它可以帮助你:) – Jacky

相关问题