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

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

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

Re[2]: Bindingってどうやって実現してのか?


(過去ログ 95 を表示中)

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

■56925 / inTopicNo.1)  Bindingってどうやって実現してのか?
  
□投稿者/ デザパタ (39回)-(2011/02/05(Sat) 13:22:56)

分類:[.NET 全般] 

.NETにはBindingというものがあります。
UIのコントロールにデータを関連付けて、
データが変更されたときにUIを自動的に変更する仕組みのことです。

この変更検知をどうやって実現しているのかが気になります。

C言語で同様のことを実装する場合、バインディング時に
データのコピーを作って置いて、
データとコピーを常にmemcmpで比較するみたいな安易な考えしか思いついきません。

C言語ではクラスがないのでint型の変数に値が代入されたことを知るすべがありませんが、
C#ではint型も値型のクラスなので代入時に何かフレームワークレベルでイベントが発行されているのでしょうか?

引用返信 編集キー/
■56927 / inTopicNo.2)  Re[1]: Bindingってどうやって実現してのか?
□投稿者/ 魔界の仮面弁士 (2055回)-(2011/02/05(Sat) 15:04:13)
No56925 (デザパタ さん) に返信
> この変更検知をどうやって実現しているのかが気になります。
単純バインディングの場合と、リストベースの物とで若干の違いはありますが、
「イベントを利用する」というのが、その通知方法の一つです。

Text プロパティに対して TextChanged イベントがあるように、バインド可能なプロパティには
対応する *Changed イベントが存在しますので、これが変更検知として利用されています。

そのほか、下記が参考になるでしょう。WPF や ASP.NET の場合はまた別の技術になりますが。

[Windows フォーム データ バインディングの変更通知]
http://msdn.microsoft.com/ja-jp/library/xz45s2bh%28VS.80%29.aspx


> C言語で同様のことを実装する場合、バインディング時に
ちなみに COM の世界だと、こんな形でのバインディング技法があります。
http://msdn.microsoft.com/en-us/library/ms531373%28VS.85%29.aspx

# VB6 だと、DataBindingBehavior = vbSimpleBound / vbComplexBound とか、
# CanPropertyChange / PropertyChanged メソッドという話になってみたり。
# http://support.microsoft.com/kb/161273/ja


> C#ではint型も値型のクラスなので代入時に何かフレームワークレベルでイベントが発行されているのでしょうか?
コレクション等を経由させずに、int 型そのものをデータバインドさせるという事ですか?

質問の意味が理解しきれていないのですが、これは、どのような状況を指しているのでしょうか。
int型の場合、変数の中身を(再代入せずに)変更することはできないので、
変更通知は起こらないように思えるのですが…。


int 型のバインドということで、とりあえず、
 textBox1.DataBindings.Add("Text", intValue, null);
のような事を想像したのですが、この場合、DataSourceUpdateMode に何を指定しようとも、
バインドしなおさない限りは変更結果が反映されませんでした。
引用返信 編集キー/
■56928 / inTopicNo.3)  Re[2]: Bindingってどうやって実現してのか?
□投稿者/ デザパタ (40回)-(2011/02/05(Sat) 15:37:26)
>コレクション等を経由させずに、int 型そのものをデータバインドさせるという事ですか?

そういう意味でいいました。

>int 型のバインドということで、とりあえず、
> textBox1.DataBindings.Add("Text", intValue, null);
>のような事を想像したのですが、この場合、DataSourceUpdateMode に何を指定しようとも、
>バインドしなおさない限りは変更結果が反映されませんでした。

確かに反映されませんね。

>[Windows フォーム データ バインディングの変更通知]
>http://msdn.microsoft.com/ja-jp/library/xz45s2bh%28VS.80%29.aspx

通知処理を実装したオブジェクトでないとだめなんですね。
なんでもかんでもいけるものと思っていました。

魔界の仮面弁士さん。ありがとうございます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -