質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

4483閲覧

WPF MVVM ボタンを押してImageに画像を表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/07/13 06:43

編集2021/09/13 11:39

前提・実現したいこと

環境: Win10 、VS2019、C#
フレームワーク:Prism、ReactiveProperty
起動時に画像表示していた処理を
ボタンを押して画像表示させたいが
表示できない。
MainWindowViewModel()内にある画像表示処理を
(画像表示は確認済)
ImageDispLayButtonExe()に移動すると、メッセージボックスは
表示されますが画像が表示されません。
任意のタイミングで画像を表示させたい場合は
どうすればよろしいでしょうか?
参考になるページ等、有りましたらアドバイスをお願いします。
関連質問
https://teratail.com/questions/349170?nli=60ecfdf1-a4fc-4e75-94a8-4d000a040507

該当のソースコード

MainWindow.xaml

<Window x:Class="DrawCircle.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" Title="{Binding Title}" Height="400" Width="500" WindowStartupLocation="CenterScreen"> <Grid> <StackPanel> <Button Content="画像表示" Command="{Binding ImageDispLayButton}" /> <Image Stretch="None" Source="{Binding Bitmap.Value}" Height="381" Width="496" /> <ContentControl prism:RegionManager.RegionName="ContentRegion" /> </StackPanel> </Grid> </Window>

MainWindowViewModel.cs

using Prism.Mvvm; using System.Windows; using Reactive.Bindings; using System.Windows.Media.Imaging; using System; using Prism.Commands; namespace DrawCircle.ViewModels { public class MainWindowViewModel : BindableBase { public ReactiveProperty<BitmapImage> Bitmap { set; get; } public ReactiveProperty<BitmapImage> rp_image1 { set; get; } public ReactiveCommand<string> changecommand { set; get; } = new ReactiveCommand<string>(); public MainWindowViewModel() { ImageDispLayButton = new DelegateCommand( ImageDispLayButtonExe); //画像表示 //BitmapImage image1 = new BitmapImage(new Uri(@"C:\Test\hoge.jpg")); //rp_image1 = new ReactiveProperty<BitmapImage>(image1); //Bitmap = rp_image1; } //コマンドのデリゲード定義 public DelegateCommand ImageDispLayButton { get; } private void ImageDispLayButtonExe() { BitmapImage image1 = new BitmapImage(new Uri(@"C:\Test\hoge.jpg")); rp_image1 = new ReactiveProperty<BitmapImage>(image1); Bitmap = rp_image1; MessageBox.Show("画像表示"); } } }

試したこと

ボタンを実行したときのimage1、rp_image1 、Bitmapの値を確認して画像への
パスが入ってるとこまでは確認しました。
イメージ説明

補足情報(FW/ツールのバージョンなど)

環境: Win10 、VS2019、C#
フレームワーク:Prism、ReactiveProperty

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ReactivePropertyValueの値が変わったときに、PropertyChangedイベントを発行する仕組みです。
INotifyPropertyChangedの実装で、プロパティのセッターであれこれする面倒を隠ぺいしてくれます。

なのでReactiveProperty自体を、丸ごと入れ替えては意味がありません。
Valueに入れてください。

こういうミスが起きないよう、ReactivePropertyはゲッターのみにするのをお勧めします。

cs

1using Prism.Mvvm; 2using Reactive.Bindings; 3using System; 4using System.Windows; 5using System.Windows.Media.Imaging; 6 7namespace Questions349227 8{ 9 public class MainWindowViewModel : BindableBase 10 { 11 public ReactiveProperty<BitmapImage> Bitmap { get; } = new ReactiveProperty<BitmapImage>(); 12 public ReactiveCommand ImageDispLayButton { get; } = new ReactiveCommand(); 13 14 public MainWindowViewModel() 15 { 16 ImageDispLayButton.Subscribe(ImageDispLayButtonExe); 17 } 18 19 private void ImageDispLayButtonExe() 20 { 21 BitmapImage image1 = new BitmapImage(new Uri(@"https://teratail-v2.storage.googleapis.com/uploads/avatars/u19/191969/efjnfT0D_thumbnail.jpg")); 22 Bitmap.Value = image1; 23 24 MessageBox.Show("画像表示"); 25 } 26 } 27}

投稿2021/07/13 08:52

編集2023/07/28 13:44
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/07/14 00:36

意図したとおりの結果を得ることが出来、ありがとうございました。 アドバイス、訂正して頂いたソースを含めて、今後の参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問