2012-01-31 36 views
0

リストボックスをDataSourceとしてList<object>にバインドしました。私がしたいのは、リストボックスのSelectedValueプロパティ(現在の選択に対応するオブジェクト)を、編集のためにオブジェクトの特定の値を表示するいくつかのテキストボックスのDataSourceとして使用することです。 私はC#(Winforms)データソースとしてListbox.SelectedValueを使用したデータバインディング

TextBox.DataBindings.Add(new Binding("Text", ListBox, "SelectedValue.name"));  

TextBox.DataBindings.Add(new Binding("Text", ListBox.SelectedValue, "name")); 

を試してみたが、リストボックスで選択したものが(フォームがまだ示されていないため)が存在しないとして、私はバリュー」についての例外を取得することはできませんヌル"。

私のフォームのSelectionChangeCommittedハンドラ(つまり、選択が行われた後)のListBox.SelectedValueにバインドできますが、これを行う必要がある場合は、TextBoxの私はこの問題を解決するためにこれを行うことができましたが、データバインディングについてもっと学びたいと思います。

私の質問は簡単です:ListBox.SelectedValue に一度(ListBoxが選択される前)にバインドして、null値の例外を回避することができますか?私の頭の上オフ

答えて

0

、私はあなたが各selectedItemChangedイベントで何かをする必要があるだろうと思います...

私はこれがあなたの質問に答えていませんが、私が代わりにWPFを使用して見たい知っていますこれはWPFでははるかにエレガントなので、代わりにXAMLを使用してコードでGUIを作成しないようにすることで、プロジェクトを完了したときの健全性ははるかに損なわれません。私は十分なWindowsフォームを思い出しませんが、WPFでは、バインドしているバックエンドオブジェクトにINotifyPropertyChangedを実装してから、そのListBoxのSelectedItemプロパティにバインドすると、SelectedItem以降の更新が自動的に取得されますプロパティはDependencyPropertyです。

+0

私は質問を明確にしました。私が経験している問題はSelectedItem *にバインドする前に*値があるためですその最初の選択変更をキャッチすることができますが、アイテムが選択されるたびに発生するSelectionChangeCommitted/SelectedItemChangedイベントにバインドコードを入れないようにしたいと考えています。あなたが記述しているプロセスは、偶然にもWinFormsと同様に動作します。 – Ishamael

1

projectNameCtrlのコントロールはわかりませんが、TextBoxをバインドしたいと思うでしょう。このような何か:

textBox1.DataBindings.Add(new Binding("Text", listBox1, "selectedvalue")); 


textBox1があなたのTextBox
listBox1では、データがリストボックスをバインドすることのListBoxが何も選択されていない場合でも、あなたはできるはずですあなたのListView

EDIT
ですあなたの '値はnullにはできません'という理由で別の理由が必要です。デバッガを使って、具体的にどのオブジェクトがnullであるかを判断することをお勧めします。

コントロールのDataBindings.Countプロパティを最初にチェックすることで、複数回データをバインドしないようにすることができます。 0に等しい場合は、そのコントロールにデータがまだバインドされていません。

if (textBox1.DataBindings.Count == 0) { 
    // OK to data bind textBox1. 
} 
+0

私は試みた関数呼び出しを明確にするために質問を編集しました。問題はバインドするものを知ることではなく、null値の例外を回避するためのコントロール/プロパティ値の特定の組み合わせです。 – Ishamael

+0

@Ishamael私は自分の答えを更新しました。 –

関連する問題