2011-08-09 6 views
1

非常に奇妙なケースがあります。 バインド元にバインドされたテキストボックスを持つユーザーコントロールがあります。BindingManagerBaseがバインディングから削除される理由

BindingSource bindingSource = new BindingSource(); 
this.bindingSource.Add(this.viewMode); 

this.textBox.DataBindings.Add(new Binding("EditValue", "Name", this.bindingSource, OnPropertyChanged)); 

実行時にこのユーザーコントロールのインスタンスを作成し、それをリストに追加します。私たちは、このビューにナビゲートする場合

MyUserControl view = new MyUserControl(); 
ourViews.Add(view); 

は、それがフォームに追加されます:この時点(私たちはこれを行う1回目)で

MyUserControl view = (MyUserControl)ourViews(0); 
this.Controls.Add(view); 

は、結合作品だけでなく、値がで更新されます双方向。

その後、他のいくつかのビューがナビゲート取得し、ビューには、フォームから削除されます:

this.Controls.Clear(); 
OtherUserControlView view = (OtherUserControl)ourViews(1); 
this.Controls.Add(view); 

そしてsomewhen、私たちの古いビューが再びナビゲートます: MyUserControlビュー=(MyUserControl)ourViews(0); this.Controls.Add(view);

そして今問題があります。バインディングはもう更新されません。バインディングインスタンスのBindingManagerBaseはnull(バインディングが作成されてからバインディングには触れなかった)であり、バインディングのIsBindingプロパティがfalseに設定されていることを認識しました。それで何が起こったのですか?もう一度バインディングを有効にする方法は?助けのための

おかげで、 ENY

答えて

2

LayoutControl.UseLocalBindingContextを有効にした後、バインディングは正常に機能します。 このプロパティは非表示であり、デザイナで設定することはできません。コードで設定することができます。

このソリューションはDevExpress-Supportcenterにあります。

+0

ありがとうございます。あなたのソリューションは、毎回バインディングのコンテキストを手動で設定するほうがずっといいです。 – Enyra

+0

私はこのバグを2回目にしていました。なぜなら、純粋な挫折の最初の5時間を忘れていたからです。私を2回騙す... –

0

あなたはDevExpress社・コントロールを使用していますか? 問題は、2つのLayoutControlsが互いにネストされている場合に表示されます。 テキストボックスを内部LayoutControlから取り出した場合、バインディングは機能し続けます。

ソリューションを見つけましたか?

私は、すべてのコントロールに対して新しいバインディングを作成することはできませんでした。

+0

はい私はDevExpressコントロールを使用していますが、まったく同じ効果があります。親コントロールから削除した後、ユーザーコントロールがBindingContextを失っていることがわかりました。ビューを再度追加した後、BindingContextを再割り当てする必要がありました。 – Enyra

0

私も同様のことをしていますが、私は別の回避策を見つけました。ユーザーコントロールを追加すると、BindingContextをどこかにバックアップします(これには "StackedControl"構造があります)。それを取り除くときは元に戻してください。これはバインディングの問題を解決するようです。

関連する問題