1

MVVM、XAML、C#を使用したWindows8プロジェクトがあります。

ObservableCollection私の方法の1つは、現在、Picturesフォルダー内のすべての画像を更新し、BitmapImage形式に変換しています。これは、xamlにバインドされ、画像をで表示しますListGrid。私が抱えている問題は、ユーザーがDoubleTappedの画像を開くことができるように、SelectedItemプロパティを使用したいということです。これを行うには、のパスを取得する必要があります。現在、これを実行しようとすると、プロパティはnullに設定されます。私は間違って何をしましたか?ListGridBitmapImagesObservableCollectionUriSource

これが私のObservableCollection「Images」にデータを取り込むメソッドです:

  private async void FindRelatedImages()
        {
            FileOpenPicker picPicker = new Windows.Storage.Pickers.FileOpenPicker();
            List<string> fileTypeFilter = new List<string>();
            fileTypeFilter.Add(".png");
            fileTypeFilter.Add(".jpg");
            fileTypeFilter.Add(".jpeg");
            fileTypeFilter.Add(".gif");
            fileTypeFilter.Add(".bmp");
            var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, fileTypeFilter);
            StorageFolder folderToGetPicsFrom = KnownFolders.PicturesLibrary;
            var query = folderToGetPicsFrom.CreateFileQueryWithOptions(queryOptions);
            IReadOnlyList<StorageFile> fileList = await query.GetFilesAsync();
            // Process results
            ObservableCollection<BitmapImage> newList = new ObservableCollection<BitmapImage>();
            foreach (StorageFile file in fileList)
            {
                // Process file
                BitmapImage src = new BitmapImage( uriSource : new Uri(file.Path));
               // src.UriSource = new Uri(file.Path, UriKind.Absolute);
                src.SetSource(await file.OpenAsync(FileAccessMode.ReadWrite));
                newList.Add(src);
            }
            Images = newList;
        }
4

1 に答える 1

1

任意のファイルに対してBitmapImage.UriSourceをnewUri(file.Path))に設定しても、何かが行われているとは思えません。SetSourceを呼び出すことで、基本的にその誤った設定をオーバーライドします。通常、UriSourceを有効なソースに設定した場合(後でSetSourceを呼び出す必要はありません)、これらは画像をロードするための2つの異なる方法です。

ObservableCollectionを使用する代わりに、ItemViewModelにBitmapImageとStorageFileのプロパティがあるObservableCollectionのようなものを使用できます。次に、パスまたはファイルを他の場所に渡すために必要なすべてがあります。それでは、もう一度、BitmapImage自体をダブルタップで渡してみませんか?画像をWriteableBitmapとして開くためのパスが必要な場合は、WriteableBitmapから始めてみませんか。その他の理由でパスが必要な場合は、ItemViewModelにプロパティを追加するだけです。

于 2013-01-16T18:26:55.663 に答える