2016-09-22 14 views
0

私はWindows 8.1 Storeアプリケーションを持っており、ビューの1つにイメージを表示する必要があります。私はこれをWPFデスクトップアプリケーションで何百回もやってきたので、やりやすいはずですが、私のイメージは表示されません。私はこのイメージをバイト配列としてリポジトリから取得します。私はチェックし、私のビューが表示された時点で私のViewModelのすべてのバイトを持っています。しかし、私はそれを見ない。これは、Windows 8.1 Storeアプリケーションで実際に画像を表示しようとするのは初めてのことです。そのため、さまざまなことが行われるのだろうかと思います。ここでイメージがWindows 8.1で表示されないStoreアプリケーション

は私のXAMLコードです:

<Border Grid.Column="2" BorderBrush="White" BorderThickness="5" Margin="2"> 
    <Image Source="{Binding ImageBuffer}" AutomationProperties.Name="{Binding CompanyName}" 
      Width="280" Height="190" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
</Border> 

コードが背後に、私が言ったように、適切に画像のすべてのバイトで初期化された「ImageBuffer」パブリックプロパティが含まれています。

private byte[] _imageBuffer; 
public byte[] ImageBuffer 
{ 
    get { return _imageBuffer; } 
    set { Set(() => ImageBuffer, ref _imageBuffer, value); } 
} 

プロジェクト用にMVVM Light Toolkitを使用しています。

提案がありますか? (それがWPFであるように)

おかげで、

エディ

答えて

1

は明らかでWinRTのImageSourcebyte[]からの自動型変換が存在しません。この様結合Image.Sourceでそれを使用すると

using System; 
using System.IO; 
using Windows.Storage.Streams; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Media.Imaging; 
... 

public class ImageConverter : IValueConverter 
{ 
    public object Convert(
     object value, Type targetType, object parameter, string language) 
    { 
     var bitmap = new BitmapImage(); 
     var buffer = value as byte[]; 

     if (buffer != null) 
     { 
      using (var stream = new InMemoryRandomAccessStream()) 
      { 
       stream.AsStreamForWrite().Write(buffer, 0, buffer.Length); 
       stream.Seek(0); 
       bitmap.SetSource(stream); 
      } 
     } 

     return bitmap; 
    } 

    public object ConvertBack(
     object value, Type targetType, object parameter, string language) 
    { 
     throw new NotSupportedException(); 
    } 
} 

:あなたは、あなたがこのようなバインディングコンバーターを使用する必要があります

Error: Converter failed to convert value of type 'Windows.Foundation.IReferenceArray`1' to type 'ImageSource'; ...

のようにVisual Studioでの出力ウィンドウにエラーメッセージを見ている必要があります

<Page.Resources> 
    <local:ImageConverter x:Key="ImageConverter"/> 
</Page.Resources> 
... 
<Image Source="{Binding ImageBuffer, Converter={StaticResource ImageConverter}}" ... /> 
+0

ありがとう、クレメンス。それは本当にうまくいった。出力ウィンドウにエラーが表示されました。私は、何かが期待どおりに動かないときにもそれを見ることを学んだ。 – Eddie

+0

Clemensのソリューションを試している人のための他のコメントの1つである "AsStreamForWrite"は、System.IO名前空間を追加した場合にのみ利用できる拡張メソッドです。それはすぐにはわかりませんでした。私はVisual Studio 2015にReSharperを持っていないので、その方法がどこから来ているかを知るためにちょっと掘り下げなければなりませんでした。とにかく、優れた解決策です。 Clemensにもう一度感謝します。 – Eddie

関連する問題