2009-08-26 12 views
2

オブジェクトのインスタンスへの単純なデータバインドを試みています。このような何か:IEnumerableを実装するオブジェクトのプロパティへのデータバインド

public class Foo : INotifyPropertyChanged 
{ 
    private int bar; 
    public int Bar { /* snip code to get, set, and fire event */ } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

// Code from main form 
public Form1() 
{ 
    InitializeComponent(); 
    Foo foo = new Foo(); 
    label1.DataBindings.Add("Text", foo, "Bar"); 
} 

私はTがint、文字列、何でもありのIEnumerableを実装するためのFooクラスを修正するまで、これは動作します。その時点で、データバインディングを追加しようとするとArgumentExceptionが発生します。DataSourceのプロパティまたは列バーにバインドできません。

私の場合、列挙は気にしません。オブジェクトの列挙できないプロパティにバインドしたいだけです。これに何かクリーンな方法がありますか?実際のコードでは、私のクラスはIEnumerableを実装していません。

私が瞬間を持っている最善の回避策は、オブジェクトをバインディングリストに入れて1つのアイテムだけを入れ、バインドすることです。あなたはおそらくそれにIEnumerableを、バインドを継承するクラス内に含まれる子クラスを作成することができます

+0

この問題の解決方法はありますか?私もこの問題を抱えていて、BindingListにプロパティの戻り値を変更すると、は実行できません。 –

+0

私は良い解決策を見つけることを覚えていません。私は、このタイプのオブジェクトにはデータバインディングを使用しないことにしました。 –

+0

Thx。私は、ExpressionTreeをとり、1つのProperty doバインドだけを含むBindingAdapterを作成しました。 ExpressionTreeは、WinFormsのデフォルトのバインディングよりもmutchをサポートしています。私は今テキストエディットをリストの特定の項目にバインドすることができます。私はBindingListにプロパティの型を変更できない理由は、動的なUIの魔女を作成しています。まあ、関係なく。 BindingAdapterは機能します。 –

答えて

0

:ここ

は、二つの関連の質問です。このような並べ替え:

class A : IEnumerable { ... } 
class Foo : A 
{ 
    private B _Abar = new B(); 
    public B ABar 
    { 
     get { return _Abar; } 
    } 
} 

class B : INotifyPropertyChanged 
{ 
    public int Bar { ... } 
    ... 
} 

public Form1() 
{ 
    InitializeComponent(); 
    Foo foo = new Foo(); 
    label1.DataBindings.Add("Text", foo.ABar, "Bar"); 
} 

このトリックを行う必要があります。

関連する問題