2016-10-14 4 views
0

ListViewに画像と選択された画像の名前の両方を表示しようとしています。これまでのところ、List<BitmapImage>Image要素と要素の両方を表示するListView.ItemsSourceにItemTemplateの範囲でバインドしました。それぞれのImageの名前を別のList<string>に追加しました。ここで私は立ち往生しています。どのようにしてList<BitmapImage>List<string>の両方を単一のListViewにバインドし、それぞれのList Itemの尊重されたフィールドにバインドできますか?異なるタイプの2つのリストをリストビューにリンクする

コードスニペットは以下の通りである:

XAMLのリストビュー:代わりに2つのリストの

<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

2つのプロパティ( 'Image'と' ImageName')を持つクラスを作成する必要があります。次に、2つの別々の 'List'の代わりにクラスのListを作成し、最後に' ItemsSource'を 'List'に設定します。どのようにクラスとそれの 'List'を作成するかの例http://stackoverflow.com/a/32285112/2946329 –

答えて

0

、ちょうど1を使用します。

第一、新しいを作成しますクラス、それをImageDetailsと呼ぶことにしましょう。

: このクラスは、2つのプロパティが含まれ、1は画像そのもので、1はあなただけの追加のために List<ImageDetails>

例を呼び出し、代わりにロード2リストの、だから今Imageの名前

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

ですGETALLため

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

例:

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クラスを持っていましたが、私はそれがデッドエンドだと思ったのでそれを放棄しました。私は間違っていたことが分かります、ありがとう! – Haybale100

+0

@ Haybale100それはあなたを助けてうれしい:) – Jacky

関連する問題