C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: WPC / DataGridのImageがキャッシュされる


(過去ログ 74 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■43129 / inTopicNo.1)  WPC / DataGridのImageがキャッシュされる
  
□投稿者/ ひげ7 (2回)-(2009/10/29(Thu) 18:42:18)

分類:[C#] 

2009/10/29(Thu) 18:45:28 編集(投稿者)
2009/10/29(Thu) 18:45:19 編集(投稿者)

2度目の投稿です。宜しくお願いします。

【やりたいこと】
WPC(C#)で、DataGridに画像を含むレコードを表示させる。

画像は、データセットにURL文字列(http://example.com/hogehoge.jpg)で格納されており
データセットを、DataGridのItemsSourceに設定することで
画像を含むレコードを、DataGridに表示しています。

#URL形式のDataGridのImageに渡すと
#DataGridが自動的にURL文字列(http://example.com/hogehoge.jpg)に接続して
#データを取得してくれるようです。

【困っていること】
一度、http://example.com/hogehoge.jpgの画像をDataGridに表示した後、
http://example.com/hogehoge.jpgの画像を(FTP等で)更新し、
DataGridを更新しても、DataGridの画像が更新されません。

アプリケーションを一度終了すると、更新した画像が正常に表示されています。

多分URLが同じなので、アプリケーション生存中はキャッシュする機能が働いているのではと推測していますが、詳細はわかりません。

URLは動的なものにすればいいのでしょうが、サーバ側には手を入れづらい事情があるため、クライアント側で解決したいと思っています。

XAMLでは、以下のようなDataGridを定義しています。

【XAML】
<Page x:Class="Hige7.Pages.ResultList" ....
(..snip)
<my:DataGrid Name="members">
<my:DataGrid.Columns>
<my:DataGridTemplateColumn Header="画像" Width="80">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImageUrl}" />
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
(..snip)

【C#】

members.ItemsSource = null; // 念のため初期化
members.ItemsSource = _members.dataset.Rows; // DataGridにデータセットを設定

環境は、VisualStudio2008 Pro です。

どうぞ宜しくお願いします。
引用返信 編集キー/
■43137 / inTopicNo.2)  Re[1]: WPC / DataGridのImageがキャッシュされる
□投稿者/ Hongliang (498回)-(2009/10/29(Thu) 20:44:50)
// WPC って、ひょっとして WPF の間違いでしょうか?

> #URL形式のDataGridのImageに渡すと
> #DataGridが自動的にURL文字列(http://example.com/hogehoge.jpg)に接続して
> #データを取得してくれるようです。
正確には、Image.Source プロパティの型である ImageSource クラスの TypeConverter 属性に定義されている ImageSourceConverter によって、文字列の場合は URL であると解釈され画像が取得されます。

> 多分URLが同じなので、アプリケーション生存中はキャッシュする機能が働いているのではと推測していますが、詳細はわかりません。
大体そんな感じの挙動ですね。
ただこのキャッシュは HTTP レスポンスのヘッダは考慮しないみたいですが(Cache-Control などが無視され、強制的にキャッシュされるようです)。

> URLは動的なものにすればいいのでしょうが、サーバ側には手を入れづらい事情があるため、クライアント側で解決したいと思っています。
良くある回避策としては、適当なクエリ文字列を後ろに付けるというのがあります。
http://example.com/hogehoge.jpg?xxxx
xxxx には、DateTime.Now.Ticks などを使うとほぼ一意になるでしょう。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -