ListとObservableCollectionの相互変換
1865 ワード
WPF,silverlight,WP 7ではListやObservableCollectionがよく用いられる.ここでは彼らの間の相互転換を簡単に説明します.
List
Listは強いタイプのOjbect集合を表し、インデックスを介してアクセスし、この集合を検索、ソート、および操作する方法を提供することができる.Listは基本的にArrayListと同様であり,配列方式でインタフェースIListを実現し,必要に応じて自動的にサイズを増加させることができる.
Listの欠点:
ASPを使用する.NET開発では,DataSourceとDataBindを用いてデータをバインドするのは簡単であったが,SilverLightではそれほど簡単ではなかった.ASP.NETでは,バインド操作は一方向である.バインド操作が完了したら、値を変更したい場合は、変更が必要なダイアログボックスをポップアップするか、フォームで直接変更し、最後にメソッドDataBindを呼び出す必要があります.このような操作は特に面倒です.
ObservableCollection
ObservableCollectionは動的データセットが統合され、コレクションにアイテムが追加、変更または削除された場合、またはコレクションがリフレッシュされた場合に通知メカニズムがあります(インタフェースINotifyCollection Changedを実装します).
ObservableCollectionの欠点:
コレクション内のプロパティが変更された場合、通知メカニズムは提供されません.プログラムの実行中に、ObservableCollectionコレクションのデータを新規、削除または変更した場合、UIコレクション(DataGrid)のデータは、データの新規および削除時にのみ変更されます.しかし、セット内に既に存在するデータを修正する場合、UIレイヤのデータは変更できません.
ここではINotifyPropertyChangedと言わざるを得ません.集合ではなく、インタフェースです.クラスにイベントPropertyChangedを提供し、プロパティの値が変更されたときにクライアントに通知します.オブジェクトのステータスが変更された場合(新規、変更、削除)には、イベントPropertyChangeが変更されたセットを指すようにトリガーされます.
ObservableCollectionが彼に変化を知らせたのも、INotifyPropertyChangedインタフェースを実現したからだ.ただマイクロソフトは具体的な実装を示しており、リストを書くにはINotifyPropertyChangedインタフェースを自分で実装する必要がある.
こんなにたくさん話して、本題に戻って、それらを交換します.
いずれもコンストラクション関数で実行できます.
転載先:https://www.cnblogs.com/navigator/archive/2011/08/10/2917694.html
List
Listは強いタイプのOjbect集合を表し、インデックスを介してアクセスし、この集合を検索、ソート、および操作する方法を提供することができる.Listは基本的にArrayListと同様であり,配列方式でインタフェースIListを実現し,必要に応じて自動的にサイズを増加させることができる.
Listの欠点:
ASPを使用する.NET開発では,DataSourceとDataBindを用いてデータをバインドするのは簡単であったが,SilverLightではそれほど簡単ではなかった.ASP.NETでは,バインド操作は一方向である.バインド操作が完了したら、値を変更したい場合は、変更が必要なダイアログボックスをポップアップするか、フォームで直接変更し、最後にメソッドDataBindを呼び出す必要があります.このような操作は特に面倒です.
ObservableCollection
ObservableCollectionは動的データセットが統合され、コレクションにアイテムが追加、変更または削除された場合、またはコレクションがリフレッシュされた場合に通知メカニズムがあります(インタフェースINotifyCollection Changedを実装します).
ObservableCollectionの欠点:
コレクション内のプロパティが変更された場合、通知メカニズムは提供されません.プログラムの実行中に、ObservableCollectionコレクションのデータを新規、削除または変更した場合、UIコレクション(DataGrid)のデータは、データの新規および削除時にのみ変更されます.しかし、セット内に既に存在するデータを修正する場合、UIレイヤのデータは変更できません.
ここではINotifyPropertyChangedと言わざるを得ません.集合ではなく、インタフェースです.クラスにイベントPropertyChangedを提供し、プロパティの値が変更されたときにクライアントに通知します.オブジェクトのステータスが変更された場合(新規、変更、削除)には、イベントPropertyChangeが変更されたセットを指すようにトリガーされます.
ObservableCollectionが彼に変化を知らせたのも、INotifyPropertyChangedインタフェースを実現したからだ.ただマイクロソフトは具体的な実装を示しており、リストを書くにはINotifyPropertyChangedインタフェースを自分で実装する必要がある.
こんなにたくさん話して、本題に戻って、それらを交換します.
T tList = new List(tObjectStruct .ToList());
ObservableCollection tObjectStruct = new ObservableCollection(tList);
いずれもコンストラクション関数で実行できます.
tList.ForEach(p => tObjectStruct.Add(t));
転載先:https://www.cnblogs.com/navigator/archive/2011/08/10/2917694.html