R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

データバインドの着火方法

コントロール側の拡張プロパティ値が変更された場合の通知方法で悩んでます。

例えば、以下の Value プロパティを追加した拡張コントロールがあったとします。


public class MyTextBox : TextBox {
  public string Value { get; set; }
}


で、このプロパティにデータバインディングさせます。


public class MyHogeHoge : Form {
  public MyHogeHoge() {
    myTextBox.DataBinding.Add("Value", hogeData, "Title");
  }
}


さて、hogeData オブジェクトの変更は、INortifyPropertyChanged を経由して myTextBoxData.Value に渡すことができますが、myTextBoxData.Value プロパティが変更された時、hogeData.Title に値を渡す場合で手が止まりました。

foreach(Binding x in this.DataBindings)

としてゴリゴリ書くしかないのでしょうか?

・・・というか、この場合って、リフレクション使わないと書けませんよね?^^:

検索しても hogeData 側の通知方法ばかり目立って良い情報が見つかりませんでした・・・

投稿日時 : 2008年6月6日 4:43

Feedback

# re: データバインドの着火方法 2008/06/06 6:54 かずき

そういう場合はコントロールのValueプロパティをDependencyPropertyで作るのが吉だと思います。

# re: データバインドの着火方法 2008/06/06 9:16 かずくん

> ・・・というか、この場合って、リフレクション使わないと書けませんよね?^^:

Control - BindindSource - DataSet(DataTable)の場合は、
x.WriteValue();
で、反映できることは確認済み。

DataSetではなく、オブジェクトをバインドさせたときにも可能かどうかは未確認。
BindingSourceが介在していない場合も未確認。

# re: データバインドの着火方法 2008/06/06 9:21 とりこびと

System.Windows.Formsなら…

.Add(Binding)

のオーバーロードでBinding.DataSourceUpdateMode プロパティ

だったかと。

お役には立ててないかも。orz

# re: データバインドの着火方法 2008/06/06 13:28 R・田中一郎

かずき さん

>DependencyPropertyで作るのが吉だと思います。

調べてみたら、WPF だとそうなるんですね。
Windows Forms だと明記していませんでした。
ごめんなさい。

----------------------------------------
かずくん

>DataSetではなく、オブジェクトをバインドさせたときにも可能かどうかは未確認。

MSDN ライブラリーを見る限り、x.WriteValue(); でビンゴっぽいですね。
WriteValue 側が、この辺りの泥臭い処理はやってくれるみたいです。

って、結局 foreach するしかないんですね。

----------------------------------------
とりこびと さん

バインディング系は、とりこびとさんの過去のエントリーに助けられてますー

>.Add(Binding)
>
>のオーバーロードでBinding.DataSourceUpdateMode プロパティ

これって、バインディングを反映するタイミングの指定じゃなかったでしたっけ?

# re: データバインドの着火方法 2008/06/06 13:42 えムナウ

BindableAttribute クラス を参照してください。
カスタムコントロールを作る基礎です。

# re: データバインドの着火方法 2008/06/06 14:01 R・田中一郎

あー、やっぱり付けといた方がいいんですね。
了解です。

# re: データバインドの着火方法 2008/06/06 15:38 とりこびと

…やっぱズレてた。orz

# re: データバインドの着火方法 2008/06/06 16:06 R・田中一郎

タイミングに関しても、やはり必要があって調べたのですが、これもとりこびとさんのエントリーで勉強させてもらったんですよ^^;

# re: データバインドの着火方法 2008/06/06 19:31 かずき

orz
脊髄反射してしまった
orz

# re: データバインドの着火方法 2008/06/06 20:42 R・田中一郎

今回はグローバライズ対応のソフトだったので、楽な Windows.Form を使いました^^;

# データバインドの着火方法(その2) 2008/06/10 13:27 R.Tanaka.Ichiro's Blog

データバインドの着火方法(その2)

# データバインドの着火方法(その2) 2008/06/10 14:05 R.Tanaka.Ichiro's Blog

データバインドの着火方法(その2)

# データバインドの着火方法(その3) 2008/06/11 13:13 R.Tanaka.Ichiro's Blog

データバインドの着火方法(その3)

タイトル  
名前  
Url
コメント