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

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

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

Re[3]: WPF Windowのリアルタイム更新について


(過去ログ 73 を表示中)

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

■42654 / inTopicNo.1)  WPF Windowのリアルタイム更新について
  
□投稿者/ NICO (19回)-(2009/10/19(Mon) 22:04:10)

分類:[.NET 全般] 

こんばんは、お世話になっております。
WPFで開発をしています。

サーバからの通知を受けて、リアルタイムに画面の描画を更新したいのですが、うまくいかない事があるので質問させてください。
原因がわからず困っております。

アプリケーションを起動すると、2画面表示されます。
画面@は、.NetRemortingを利用して、サーバから通知を受け、画面上のLabelコントロールの数値を書き換えていきます。
画面Aも、.NetRemortingを利用して、サーバから通知を受けますが、画面の更新は行いません。

画面@は通知を受けたらリアルタイムに画面を更新したいのですが、画面に反映されない場合があります。
更新をするLabelは、Bindingしています。
サーバからの通知は、画面@で受信できていて、LabelのBinding先のプロパティにSetされています。

しかし、画面に反映されない場合があります。

反映されない場合に、画面@でボタンを押したり、コンテキストメニューのメニュー名を表示させたり、画面のサイズを変更してみたりすると、
反映されなかった情報がすぐに画面に更新されます。
(画面の位置を移動させたり、ボタンや、コンボボックス等のコントロールがない場所でのクリックでは、更新されません。
外部からイベントを発生させないといけないのかしら??)
また、画面@ではなく、画面Aでボタンを押したり、コンボボックスのリストを表示してみたりすると、画面@が更新されます。

画面に反映されなかった場合に、この操作を行うと、その後は、リアルタイムに画面に更新されます。

原因が全くわからず、対処のしようがないので、何か心当たりがあるかたがいらっしゃいましたらご教授お願いいたします。

引用返信 編集キー/
■42661 / inTopicNo.2)  Re[1]: WPF Windowのリアルタイム更新について
□投稿者/ Hongliang (490回)-(2009/10/19(Mon) 23:52:02)
具体的にどうバインディングしてるか分かりませんが。
リモーティングからの通知というと別スレッドで動くような気がしますが、Dispatcher.Invoke とかやってますか?
引用返信 編集キー/
■42684 / inTopicNo.3)  Re[2]: WPF Windowのリアルタイム更新について
□投稿者/ NICO (20回)-(2009/10/20(Tue) 10:44:57)
No42661 (Hongliang さん) に返信
ご返信ありがとうございます。

1画面につき、controllerクラス、viewModelクラス、viewクラスの3クラスを用意しています。
controllerクラスからviewModeクラスlにcontrollerクラスのインスタンスを渡しながら呼び、
viewクラスに、viewModelクラスのインスタンスを渡しながら呼んでいます。

Bindingですが、xamlファイルで、LabelのContentをBindingしています。
Binding先は、別クラスのviewModelクラスで、int型のプロパティを参照設定しています。
viewクラス(xaml.cs)の、コンストラクタ内で、DataContextに、viewModelクラスのインスタンスを設定することでBindingを実装しています。

通知を受けるのは、controllerクラスで、viewModelクラスがもっているプロパティにsetし、PropertyChangedEventArgsイベントを発生させています。

Dispatcher.Invokeは、やっています。
引用返信 編集キー/
■42711 / inTopicNo.4)  Re[3]: WPF Windowのリアルタイム更新について
□投稿者/ NICO (21回)-(2009/10/20(Tue) 14:39:53)

原因は画面Aの構成にありそうです。
画面Aは、Window内に、TabControlをもっていて、TabItemの中に、Frameを構成し、FlameのSourceをPageでわりあてています。

<TabControl Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" TabIndex="1" TabStripPlacement="Top" Margin="5,5,5,5">
<TabItem Header="Report" IsEnabled="True">
<Frame IsTabStop="False" Source="ReportSettingView.xaml"/>
</TabItem>

</TabControl>

PageもWindow同様に3クラスもっていますが、画面AのWindowロード時に、ReportSettingView.xamlを生成してしまうので、
Pageの生成方法は、Windowと真逆のview⇒viewModel⇒Controllerの順に生成することにしています。

生成の仕方に問題があるのでしょうか??


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -