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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.56925 の関連記事表示

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

    分類:[.NET 全般] 

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

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

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

    C言語ではクラスがないのでint型の変数に値が代入されたことを知るすべがありませんが、
    C#ではint型も値型のクラスなので代入時に何かフレームワークレベルでイベントが発行されているのでしょうか?
親記事 /過去ログ95より / 関連記事表示
削除チェック/

■56927  Re[1]: Bindingってどうやって実現してのか?
□投稿者/ 魔界の仮面弁士 -(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 に何を指定しようとも、
    バインドしなおさない限りは変更結果が反映されませんでした。
記事No.56925 のレス /過去ログ95より / 関連記事表示
削除チェック/

■56928  Re[2]: Bindingってどうやって実現してのか?
□投稿者/ デザパタ -(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

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

    魔界の仮面弁士さん。ありがとうございます。
記事No.56925 のレス / END /過去ログ95より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -