2012-01-03 3 views
5

は、私は次のようにそれらの両方のためのデータソースをassigne:一つのDataSource

private void MakeMeasurementUnits() 
{ 
    var units = new List<MeasurementUnit> 
        { 
         new MeasurementUnit {Name = "Current", SiUnit = "A"}, 
         new MeasurementUnit {Name = "Voltage", SiUnit = "V"}, 
         new MeasurementUnit {Name = "Time", SiUnit = "s"}, 
         new MeasurementUnit {Name = "Temprature", SiUnit = "°C"} 
        }; 

    lbxXunit.DataSource = units; 
    lbxYunit.DataSource = units; 
} 

奇妙なことがある(または多分それは私の最初の時間ですので! )、これらのlisboxの1つのアイテムをクリックすると、2番目のリストボックスの同じアイテムが選択されます。これはデフォルトの動作ですか?これを防ぐ方法は?これがデフォルトの動作であれば、何が役に立ちますか?

私は迅速な救済策は、2つの異なるデータソース(別の名前で同じもの)

答えて

5

リストボックスは、バインディングソースをキャッシュするように思わを作ることが判明しました。これはデフォルト動作です。あなたはこれを避けたい場合は、簡単な方法は、2番目のデータソースにバインドするには、リストのコピーを作成することです:

​​

あなたは、同じデータの複数のビューを持っていると同期させたい場合に便利ですこれらの項目の選択。

1

これは正しいの動作です。 datasourceWindowsFormsの管理では、選択した項目を管理し、バインドされたデータも処理します。

すでに見つかった解像度は、data sources objectsという2つのコントロールに割り当てられています。

3

はい、これは正常な動作です。これは、ListViewコントロールがBindingSourceオブジェクトを使用して現在選択されている項目を追跡するために発生します。 (リストはBindingSourceなしで選択した項目を追跡する方法がありません)

デフォルトでは、WinFormsコントロールのDataSourceは、WinFormsシステム自体で作成されたBindingSourceを使用します。

あなたはでのBindingSource詳細を読むことができます: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

あまりにも役立つかもしれないここに記事があります: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

2

あなたが指摘している行動は、WinFormsのコントロールのデフォルト/正しい動作です。データソースのコピーを作成せずに、2番目のリストボックスコントロール用の新しいBindingContextを設定することで、後の作業を達成できます。

BindingContext

関連する問題