2011-07-23 7 views
3

分離ストレージに置か画像 - 私は1つの答えここで見つける をし、それが私の状況思わ
Binding image in Isolated Storageバインドする方法を私は分離ストレージに置か画像バインドする必要があり

しかし、その後、この人は別のソリューションに切り替えており、イメージ保管のためにClientBinを使用しました。私の写真はいつも違うでしょう。 は、今私は、サーバーから画像を使用しますが、私は、XAMLにはlistBox コードに分離ストレージに保存してバインドする必要があります:背後

Image Width="110" CacheMode="BitmapCache" Source="{Binding ThumbURL}"

コード:

public string ThumbURL 
    { 
     get 
     { 
      return String.Format("http://localhost:3041/Pictures/thumbs/{0}.jpg", _ID); 
     } 
     set 
     { 
      this.OnThumbURLChanging(value); 
      this._ThumbURL = value; 
      this.OnThumbURLChanged(); 
      this.OnPropertyChanged("ThumbURL"); 
     } 
    } 

ことができます誰にもどのようにそれを行うのアドバイス?私は本当に本当に感謝しています。

コードの例をいくつか投稿してください。

+0

にStackOverflowへようこそ - 素敵な最初の質問!ところで、シンプルなマークアップを知ることは価値があります(特にコードブロックの場合)ので、読者は何が起こっているのかを簡単に確認できます。 –

+0

ありがとう、私はあなたがそれが最初の質問であることを言及したように、実際には最初に答えられた質問でしたが、2番目にあります。 –

答えて

3

ウェブから写真をダウンロードするには、以前のSOの質問 - how-can-i-download-and-save-images-from-the-webを参照してください。

Isolated Storageでイメージをバインドする場合の違いは、バインドされたコードオブジェクトから初期化するBitmapImageオブジェクトにバインドする必要があることです。私はあなたのプロパティの名前を "ThumbUmage"から "ThumbUmage"に変更してその違いを表示しました。 XAMLでそう

Image Width="110" CacheMode="BitmapCache" Source="{Binding ThumbImage}" 

そして、あなたのバインドされたオブジェクト内で - それがない場合は、必要に応じてプロパティ変更イベントを発生させる必要があるでしょう - この絵は変わらないと仮定。 (クラスのシリアル化の問題を扱うために編集されたコード)。 (最初の場所に画像をダウンロードする方法へのリンクを追加するために編集)

private string _thumbFileName; 
public string ThumbFileName 
{ 
    get 
    { 
     return _thumbFileName; 
    } 
    set 
    { 
     _thumbFileName = value; 
     OnNotifyChanged("ThumbFileName"); 
     OnNotifyChanged("ThumbImage"); 
    } 
} 

[IgnoreDataMember] 
public BitmapImage ThumbImage 
{ 
    get 
    { 
     BitmapImage image = new BitmapImage();      
     IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); 
     string isoFilename = ThumbFileName; 
     var stream = isoStore.OpenFile(isoFilename, System.IO.FileMode.Open); 
     image.SetSource(stream); 
     return image; 
    }  
} 

public event PropertyChangedEventHandler PropertyChanged; 

private void OnNotifyChanged(string propertyChanged) 
{ 
    var eventHander = PropertyChanged; 
    if (eventHander != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyChanged)); 
    } 
} 

+0

あなたのレスポンスでPaulに感謝しますが、BitmapImageを使用することはできません。ImageSourceも試してみましたが、問題はありません。私はこの例外を持っています:タイプ 'System.Windows.Media.ImageSource'はシリアル化できません。 DataContractAttribute属性( )でマークし、DataMemberAttribute属性を使用してシリアル化するすべてのメンバーに印を付けることを検討してください。 「ThumbURL」が表示されている場合は文字列ですので、忘れてしまいました。私は他の解決策があることを知っています。今は、分離ストレージのイメージにパス型の文字列を持たせることが可能か、他のシリアライズ可能なオブジェクトを使用できるかどうか疑問です。 –

+0

いいえ、バインディングを動作させるにはImageSource型のThumbImageが必要です。この例外は、この変更の副作用のように見えます。バインドされたクラスが何らかの形でシリアル化されています(おそらく、TombstoningまたはIsolatedStorageへの格納用)。 Iso Storage(ThumbURLを置き換える)にファイル名を含むシリアライズ用のThumbFileName {get; set}プロパティの両方を使用できます。その後、ThumbImageをシリアル化の一部としてマークします。私は答えを編集します... –

+0

この「魔法の」行 '[IgnoreDataMember]'はあなたの助けをありがとう、私のコードを動作させます。 はい、そうです。それは、IsolatedStorageへのストレージのためです。 –

関連する問題