最初に、オブジェクトに対してどのようなコレクションを使用するかは気にしないとします。次のような Customer クラスがあります
C# |
コードのコピー
|
---|---|
public class Customer { public string Name { get; set; } public string City { get; set; } } |
これで、LiveLinq から提供され、LiveLinq の使用に対して特に最適化された C1.LiveLinq.Collections.IndexedCollection クラス以外を考慮する必要はなくなります。
C# |
コードのコピー
|
---|---|
var customers = new IndexedCollection<Customer>(); customers.Add(cust1); customers.Add(cust2); ... var query = from c in customers where c.City == "London" select c; |
上の Customer などの独自のクラスをコレクションの要素に使用する場合は、考慮するべき重要な事項があります。上の Customer は基本的なクラスで、プロパティ通知をサポートしていません。コードでプロパティを設定した場合は、コレクションに対して作成されたインデックスやライブビューを含めて、何もその変更を認識できません。したがって、このようなクラスでは、プロパティ変更通知を必ず提供する必要があります。プロパティ変更通知は、さまざまな理由で推奨される標準の .NET 機能ですが、LiveLinq もまたその理由を加えます。INotifyPropertyChanged インタフェースを実装することで、独自のクラスでプロパティ変更通知をサポートできます。
C# |
コードのコピー
|
---|---|
public class Customer : IndexableObject { private string _name; public string Name { get {return _name} ; set { OnPropertyChanging("Name"); _name = value; OnPropertyChanged("Name"); } } private string _city; public string City { get {return _city}; set { OnPropertyChanging("City"); _city = value; OnPropertyChanged("City"); } } } |