過去に画像を表示したいときはいつでも、画像パスを画像のソース プロパティにバインドしていました。簡単すぎる。
ここで、画像を変更し、常に最新の変更を加えた画像を表示したいと考えています。BitmapImage
変更画像は、クラス内のプロパティに保存されます。BitmapImage
そのため、イメージ コントロールにディスクからイメージをロードするように要求する代わりに、それを自分のプロパティに直接バインドしたいと考えました。しかし、画像は表示されません。
次に(テストのためだけに)値コンバーターを作成し、そこにある画像へのパスを使用して を作成し、BitmapImage
それをコントロールに返しました-画像が表示されます。
繰り返しBitmapImage
ますが、カバーター内のパスからの作成は機能します。BitmapImage
同じコードを使用してクラスで作成されたプロパティにイメージ コントロールをバインドすると失敗します。
それは同じ問題を説明していますが、「解決策」は機能しません。(OPが同じコメントをしたので、なぜ解決済みとしてマークされているのだろうか)
編集:ここにいくつかのコードがあります
これは、可視画像を正常に作成するコンバーターです。
public class BsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
BitmapImage bi = new BitmapImage(new Uri(value.ToString()));
return bi;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
...そして、画像を表示する XAML バインディング。File
タイプFileInfo
でありFullName
、完全なパスを保持します。
<Image MinHeight="100" MinWidth="100" Source="{Binding SelectedImage.File.FullName, Converter={StaticResource BsConverter}}"/>
BitmapImage image { get; set; }
クラスのコンストラクターで初期化するプロパティがあります。
image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(file.FullName);
image.CacheOption = BitmapCacheOption.OnLoad;
image.EndInit();
...そしてバインディング。しかし - 喜びはありません。画像が表示されません。
<Image MinHeight="100" MinWidth="100" Source="{Binding SelectedImage.image}"/>