画面にImageコントロール、Buttonコントロールを2個(ボタン1,ボタン2と表記)を配置しております。
初期表示時点ではImageコントロールにC:\hoge.jpgを表示して、
ボタン2が押されたらImageの中身をC:\hoge2.jpgに切り替え、
ボタン1が押されたらImageの中身をC:\hoge.jpgに戻すという処理を行いたいです。
そこでReactivePropertyを利用させていただいてボタンのCommandを使って切り替えたく
以下のようにソース(xaml、MainWindow.cs、MainWindowViewModel.cs)を書きました。
xaml
1<Window x:Class="ImageChange.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:ImageChange" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 <Grid> 10 <Grid.RowDefinitions> 11 <RowDefinition></RowDefinition> 12 <RowDefinition></RowDefinition> 13 <RowDefinition></RowDefinition> 14 </Grid.RowDefinitions> 15 <Image Source="{Binding rp_main.Value}"></Image> 16 <Button Grid.Row="1" 17 Command="{Binding changecommand}" 18 CommandParameter="1">ボタン1 19 </Button> 20 <Button Grid.Row="2" 21 Command="{Binding changecommand}" 22 CommandParameter="2">ボタン2 23 </Button> 24 25 </Grid> 26</Window> 27
MainWindow
1 public partial class MainWindow : Window 2 { 3 public MainWindow() 4 { 5 InitializeComponent(); 6 this.DataContext = new MainWindowViewModel(); 7 } 8 }
MainWindowViewModel
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using Reactive.Bindings; 7using System.Windows; 8using System.Windows.Media.Imaging; 9 10namespace ImageChange 11{ 12 class MainWindowViewModel 13 { 14 public ReactiveProperty<BitmapImage> rp_main { set; get; } 15 public ReactiveProperty<BitmapImage> rp_image1 { set; get; } 16 public ReactiveProperty<BitmapImage> rp_image2 { set; get; } 17 public ReactiveCommand<string> changecommand { set; get; } = new ReactiveCommand<string>(); 18 19 public MainWindowViewModel() 20 { 21 BitmapImage image1 = new BitmapImage(new Uri(@"C:\hoge.jpg")); 22 BitmapImage image2 = new BitmapImage(new Uri(@"C:\hoge2.jpg")); 23 rp_image1 = new ReactiveProperty<BitmapImage>(image1); 24 rp_image2 = new ReactiveProperty<BitmapImage>(image2); 25 rp_main = rp_image2; 26 27 changecommand.Subscribe(x => 28 { 29 if (x == "1") 30 { 31 rp_main = rp_image1; 32 MessageBox.Show(rp_main.ToString()); 33 } 34 else 35 { 36 rp_main = rp_image2; 37 MessageBox.Show(rp_main.ToString()); 38 } 39 } 40 ); 41 } 42 } 43}
上記のようにReactiveProperty<BitmapImage>型のrp_mainの中身を、
ボタン押下時のchangecommandによってrp_image1、rp_image2に置き換えています。
しかし、画面上のImageは変化がありません。
MessageBox.Show(rp_main.ToString());によって
rp_mainの中身がボタン押下によって変化していることは
確認できたのですが、画面上に変化が無いのはなぜなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/01 08:50
2018/11/01 09:00
2018/11/01 09:54
2018/11/01 10:01
2018/11/02 14:21