実現したいこと
C#でウィンドウを表示して画面項目を更新させたいです。
発生している問題・分からないこと
※独自のUIライブラリを使用しています。
画面表示ボタンを押下するとButtonClickメソッドが実行され、画面が表示されます。
この時Valueは0なので、画面のValue項目は「0」と表示されます。
画面更新ボタンを押下するとUpdateButtonClickメソッドが実行され、画面項目が更新されます。
Valueが50になり、画面のValue項目は「50」と更新されます。
該当のソースは以下になります。
C#
1private XXXWindow xWin; 2private void ButtonClick(object sender, RoutedEventArgs e) 3{ 4 xWin = new XXXWindow(); 5 xWin.Value = 0; 6 xWin.Show(); 7} 8 9private void UpdateButtonClick(object sender, RoutedPropertyChangedEventArgs<double> e) 10{ 11 xWin.Value = 50; 12}
この挙動を以下のように実装しているのですが、画面のValue項目が「50」に更新されません。
処理が流れ終わってから画面が更新されます。
原因が全くわからないので、ご教授お願い致します。
C#
1XXXWindow xWin = new XXXWindow(); 2xWin.Value = 0; 3xWin.Show(); 4xWin.Value = 50;
該当のソースコード
C#
1public class XXXWindow : YYYWindow 2{ 3 public static readonly DependencyProperty ValueProperty; 4 5 [Category("")] 6 [Description("")] 7 public double Value 8 { 9 get 10 { 11 return (double)GetValue(ValueProperty); 12 } 13 set 14 { 15 SetValue(ValueProperty, value); 16 } 17 } 18 static XXXWindow() 19 { 20 ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(XXXWindow), new FrameworkPropertyMetadata(0.0)); 21 } 22 23 public XXXWindow() 24 { 25 // 画面の初期設定など 26 } 27}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
イベントを発生させるのかと思いましたが、よく理解できませんでした。
補足
特になし
> ※独自のUIライブラリを使用しています。
ルーティングイベントを使っているということはWPFやUWP等だと思うのですが、それらではなく「独自のUIライブラリ」という意味ですか?(もしそうなら第3者は答えようがないと思うのですが...)
> この挙動を以下のように実装しているのですが、画面のValue項目が「50」に更新されません。
上のコードでは更新されるが、下のコードでは更新されないという意味ですか?
下のコードはどのメソッド内にあるのですか?
> 処理が流れ終わってから画面が更新されます。
「処理」というのは何ですか?
結局更新自体はされるのですか?
もう少し他人にも伝わるような内容にしてください。
[ヘルプ|質問する時のヒント](https://teratail.com/help/question-tips)
申し訳ありません。最近C#を始めたばかりなので粒度の低い質問になってしまいました。
>ルーティングイベントを使っているということはWPFやUWP等だと思うのですが、
XXXWindowクラス内でDependencyPropertyが定義されているため、WPFだと思います。
内容の詳細について
上のコードは試験的に、Demo.xamlを作成してDemo.xaml.csに書いた内容になります。
下のコードはMainViewModel.csのコンストラクタに記載しています。
処理が終わってから更新されるというのは、MainViewModel.csの処理がすべて流れ切って、デバッグ実行できなくなると画面が更新されるということです。
理想としては、ボタンを押下するなどのイベントがなくても、xWin.Valueの値が変更されたら画面項目を更新したいです。
xWin.Value = 0;
xWin.Show(); // Value項目が「0」で画面表示
xWin.Value = 50; // Value項目が「50」で画面表示
xWin.Value = 100; // Value項目が「100」で画面表示
XXXWindowのソースコードを提示できますか?
XXXWindow.xaml, XXXWindow.xaml.csのValueプロパティや表示したいコントロールとのつながりが分かる部分でいいですが不明なら全体でもいいと思います。
XXXWindow.xamlは存在しないため、XXXWindowクラス内のコードを記載しました。
XXXWindowは外部ライブラリのため、インスタンス生成し、Showメソッドを実行するだけで画面が表示される仕様になっています。
ありがとうございます。
このValue依存関係プロパティは値変更時のコールバックが設定されていません。
通常はRegister()の最後の引数で
new FrameworkPropertyMetadata(0.0, valueChangedCallback)
のようにvalueChangedCallbackを設定し、
値の変更通知を受けて必要なコントロールに反映させたりするのですが、
それがないのと、このコードだけではどうやって画面表示しているのかが分からないので
回答案(コールバックの例)を書けないですね。

回答1件
あなたの回答
tips
プレビュー