2011-08-03 9 views
2

cをリサイズににCheckedListBoxにリスト をバインドしようとすると、次の動作を取得する方法があります:にCheckedListBox 私はC# のWinFormsを使用しています。#

    1. バインド一覧私はCheckedListボックスrefereshesを一覧表示する要素を追加
    2. 私はにCheckedListBoxリストを変更私は次の操作を実行しようとした

    を変更します。

    コンストラクタコード:

    checkedlistBox1.DataSource = a; 
    checkedlistBox1.DisplayMember = "Name"; 
    checkedlistBox1.ValueMember = "Name"; 
    

    フィールド:ボタン1クリックで

    List<Binder> a = new List<Binder> { new Binder { Name = "A" } };

    private void butto1_Click(object sender, EventArgs e) 
    { 
        a.Add(new Binder{Name = "B"}); 
        checkedListBox1.Invalidate(); 
        checkedListBox1.Update(); 
    } 
    

    しかし、ビューが更新されません。

    ありがとうございます。あなたが見てみたいと思うかもしれ

  • +0

    は、新しいチェックボックスを収容するのに十分な大きさのリストボックスであります? – MrFox

    答えて

    3

    2つのこと:BindingList

  • BindableAttributeあなた名にプロパティに追加使用

  • +0

    'a' BindingListを作成するには? 'a'のBindableAttribute? –

    +0

    @Sergey Kucher - 奇妙なことに、あなたのための2つのリンクが用意されています。リンクには、その意味を理解できない場合の包括的なコード例があります。 – Tim

    1

    あなたList<Bender>は、観察のいくつかの種類である必要はありませんコレクションの代わりにObservableCollection<Bender>のように?

    +0

    あなたは私に何かのコード例を教えていただけますか –

    6

    変更この行:これまで

    List<Binder> a = new List<Binder> { new Binder { Name = "A" } }; 
    

    BindingList<Binder> a = new BindingList<Binder> { new Binder { Name = "A" } }; 
    

    それはちょうど、他に変更を加えることなく動作します。

    キーは、BindingList<T>IBindingListを実装しているため、リストが変更されたときにコントロールに通知されます。これにより、CheckedListBoxコントロールはその状態を更新できます。これは双方向データバインディングです。 (基本的に、より読みやすいとは同じことを)これに

    checkedListBox1.Invalidate(); 
    checkedListBox1.Update(); 
    

    また、あなたは、次の2行を変更することができ

    checkedListBox1.Refresh(); 
    
    関連する問題