IBindingList インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データ ソースへの連結時の複雑な処理と単純な処理を両方ともサポートするために必要な機能を提供します。
public interface class IBindingList : System::Collections::IList
public interface IBindingList : System.Collections.IList
type IBindingList = interface
interface ICollection
interface IEnumerable
interface IList
type IBindingList = interface
interface IList
interface ICollection
interface IEnumerable
Public Interface IBindingList
Implements IList
- 派生
- 実装
例
次の例では、 インターフェイスの簡単な実装を IBindingList 示します。 クラスは CustomerList
、顧客情報をリストに格納します。 この例では、 クラスの Customer
例 IEditableObject に含まれる クラスを使用していることを前提としています。
public ref class CustomersList: public CollectionBase, public IBindingList
{
private:
ListChangedEventArgs^ resetEvent;
ListChangedEventHandler^ onListChanged;
virtual event ListChangedEventHandler^ ListChanged;
public:
property bool AllowEdit
{
// Implements IBindingList.
virtual bool get() sealed
{
return true;
}
}
virtual property bool AllowNew
{
bool get()
{
return true;
}
}
property bool AllowRemove
{
virtual bool get()
{
return true;
}
}
property bool SupportsChangeNotification
{
virtual bool get()
{
return true;
}
}
property bool SupportsSearching
{
virtual bool get()
{
return true;
}
}
property bool SupportsSorting
{
virtual bool get()
{
return true;
}
}
// Methods.
virtual Object^ AddNew()
{
Customer^ c = gcnew Customer( this->Count->ToString() );
List->Add( c );
return c;
}
property bool IsSorted
{
// Unsupported properties.
virtual bool get()
{
throw gcnew NotSupportedException;
return false;
}
}
property ListSortDirection SortDirection
{
virtual ListSortDirection get()
{
throw gcnew NotSupportedException;
return ListSortDirection::Ascending;
}
}
property PropertyDescriptor^ SortProperty
{
virtual PropertyDescriptor^ get()
{
throw gcnew NotSupportedException;
return nullptr;
}
}
// Unsupported Methods.
virtual void AddIndex( PropertyDescriptor^ property )
{
throw gcnew NotSupportedException;
}
virtual void ApplySort( PropertyDescriptor^ property, ListSortDirection direction )
{
throw gcnew NotSupportedException;
}
virtual int Find( PropertyDescriptor^ property, Object^ key )
{
throw gcnew NotSupportedException;
return 0;
}
virtual void RemoveIndex( PropertyDescriptor^ property )
{
throw gcnew NotSupportedException;
}
virtual void RemoveSort()
{
throw gcnew NotSupportedException;
}
// Worker functions to populate the list with data.
static Customer^ ReadCustomer1()
{
Customer^ cust = gcnew Customer( "536-45-1245" );
cust->FirstName = "Jo";
cust->LastName = "Brown";
return cust;
}
static Customer^ ReadCustomer2()
{
Customer^ cust = gcnew Customer( "246-12-5645" );
cust->FirstName = "Robert";
cust->LastName = "Brown";
return cust;
}
protected:
virtual void OnListChanged( ListChangedEventArgs^ ev )
{
if ( onListChanged != nullptr )
{
onListChanged( this, ev );
}
}
virtual void OnClear() override
{
List->Clear();
}
virtual void OnClearComplete() override
{
OnListChanged( resetEvent );
}
virtual void OnInsertComplete( int index, Object^ value ) override
{
Customer^ c = safe_cast<Customer^>(value);
c->Parent = this;
OnListChanged( gcnew ListChangedEventArgs( ListChangedType::ItemAdded,index ) );
}
virtual void OnRemoveComplete( int index, Object^ value ) override
{
Customer^ c = safe_cast<Customer^>(value);
c->Parent = this;
OnListChanged( gcnew ListChangedEventArgs( ListChangedType::ItemDeleted,index ) );
}
virtual void OnSetComplete( int index, Object^ oldValue, Object^ newValue ) override
{
if ( oldValue != newValue )
{
Customer^ oldcust = safe_cast<Customer^>(oldValue);
Customer^ newcust = safe_cast<Customer^>(newValue);
oldcust->Parent = 0;
newcust->Parent = this;
OnListChanged( gcnew ListChangedEventArgs( ListChangedType::ItemAdded,index ) );
}
}
public:
// Constructor
CustomersList()
{
resetEvent = gcnew ListChangedEventArgs( ListChangedType::Reset,-1 );
}
void LoadCustomers()
{
IList^ l = static_cast<IList^>(this);
l->Add( ReadCustomer1() );
l->Add( ReadCustomer2() );
OnListChanged( resetEvent );
}
property Object^ Item [int]
{
Object^ get( int index )
{
return static_cast<Customer^>(List->Item[ index ]);
}
void set( int index, Object^ value )
{
List->Item[ index ] = value;
}
}
int Add( Customer^ value )
{
return List->Add( value );
}
Customer^ AddNew()
{
return safe_cast<Customer^>(static_cast<IBindingList^>(this)->AddNew());
}
void Remove( Customer^ value )
{
List->Remove( value );
}
internal:
// Called by Customer when it changes.
void CustomerChanged( Customer^ cust )
{
int index = List->IndexOf( cust );
OnListChanged( gcnew ListChangedEventArgs( ListChangedType::ItemChanged,index ) );
}
};
public class CustomersList : CollectionBase, IBindingList
{
private ListChangedEventArgs resetEvent = new ListChangedEventArgs(ListChangedType.Reset, -1);
private ListChangedEventHandler onListChanged;
public void LoadCustomers()
{
IList l = (IList)this;
l.Add(ReadCustomer1());
l.Add(ReadCustomer2());
OnListChanged(resetEvent);
}
public Customer this[int index]
{
get
{
return (Customer)(List[index]);
}
set
{
List[index] = value;
}
}
public int Add (Customer value)
{
return List.Add(value);
}
public Customer AddNew()
{
return (Customer)((IBindingList)this).AddNew();
}
public void Remove (Customer value)
{
List.Remove(value);
}
protected virtual void OnListChanged(ListChangedEventArgs ev)
{
if (onListChanged != null)
{
onListChanged(this, ev);
}
}
protected override void OnClear()
{
foreach (Customer c in List)
{
c.Parent = null;
}
}
protected override void OnClearComplete()
{
OnListChanged(resetEvent);
}
protected override void OnInsertComplete(int index, object value)
{
Customer c = (Customer)value;
c.Parent = this;
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index));
}
protected override void OnRemoveComplete(int index, object value)
{
Customer c = (Customer)value;
c.Parent = this;
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, index));
}
protected override void OnSetComplete(int index, object oldValue, object newValue)
{
if (oldValue != newValue)
{
Customer oldcust = (Customer)oldValue;
Customer newcust = (Customer)newValue;
oldcust.Parent = null;
newcust.Parent = this;
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index));
}
}
// Called by Customer when it changes.
internal void CustomerChanged(Customer cust)
{
int index = List.IndexOf(cust);
OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, index));
}
// Implements IBindingList.
bool IBindingList.AllowEdit
{
get { return true ; }
}
bool IBindingList.AllowNew
{
get { return true ; }
}
bool IBindingList.AllowRemove
{
get { return true ; }
}
bool IBindingList.SupportsChangeNotification
{
get { return true ; }
}
bool IBindingList.SupportsSearching
{
get { return false ; }
}
bool IBindingList.SupportsSorting
{
get { return false ; }
}
// Events.
public event ListChangedEventHandler ListChanged
{
add
{
onListChanged += value;
}
remove
{
onListChanged -= value;
}
}
// Methods.
object IBindingList.AddNew()
{
Customer c = new Customer(this.Count.ToString());
List.Add(c);
return c;
}
// Unsupported properties.
bool IBindingList.IsSorted
{
get { throw new NotSupportedException(); }
}
ListSortDirection IBindingList.SortDirection
{
get { throw new NotSupportedException(); }
}
PropertyDescriptor IBindingList.SortProperty
{
get { throw new NotSupportedException(); }
}
// Unsupported Methods.
void IBindingList.AddIndex(PropertyDescriptor property)
{
throw new NotSupportedException();
}
void IBindingList.ApplySort(PropertyDescriptor property, ListSortDirection direction)
{
throw new NotSupportedException();
}
int IBindingList.Find(PropertyDescriptor property, object key)
{
throw new NotSupportedException();
}
void IBindingList.RemoveIndex(PropertyDescriptor property)
{
throw new NotSupportedException();
}
void IBindingList.RemoveSort()
{
throw new NotSupportedException();
}
// Worker functions to populate the list with data.
private static Customer ReadCustomer1()
{
Customer cust = new Customer("536-45-1245");
cust.FirstName = "Jo";
cust.LastName = "Brown";
return cust;
}
private static Customer ReadCustomer2()
{
Customer cust = new Customer("246-12-5645");
cust.FirstName = "Robert";
cust.LastName = "Brown";
return cust;
}
}
Public Class CustomersList
Inherits CollectionBase
Implements IBindingList
Private resetEvent As New ListChangedEventArgs(ListChangedType.Reset, -1)
Private onListChanged1 As ListChangedEventHandler
Public Sub LoadCustomers()
Dim l As IList = CType(Me, IList)
l.Add(ReadCustomer1())
l.Add(ReadCustomer2())
OnListChanged(resetEvent)
End Sub
Default Public Property Item(ByVal index As Integer) As Customer
Get
Return CType(List(index), Customer)
End Get
Set(ByVal Value As Customer)
List(index) = Value
End Set
End Property
Public Function Add(ByVal value As Customer) As Integer
Return List.Add(value)
End Function
Public Function AddNew2() As Customer
Return CType(CType(Me, IBindingList).AddNew(), Customer)
End Function
Public Sub Remove(ByVal value As Customer)
List.Remove(value)
End Sub
Protected Overridable Sub OnListChanged(ByVal ev As ListChangedEventArgs)
If (onListChanged1 IsNot Nothing) Then
onListChanged1(Me, ev)
End If
End Sub
Protected Overrides Sub OnClear()
Dim c As Customer
For Each c In List
c.parent = Nothing
Next c
End Sub
Protected Overrides Sub OnClearComplete()
OnListChanged(resetEvent)
End Sub
Protected Overrides Sub OnInsertComplete(ByVal index As Integer, ByVal value As Object)
Dim c As Customer = CType(value, Customer)
c.parent = Me
OnListChanged(New ListChangedEventArgs(ListChangedType.ItemAdded, index))
End Sub
Protected Overrides Sub OnRemoveComplete(ByVal index As Integer, ByVal value As Object)
Dim c As Customer = CType(value, Customer)
c.parent = Me
OnListChanged(New ListChangedEventArgs(ListChangedType.ItemDeleted, index))
End Sub
Protected Overrides Sub OnSetComplete(ByVal index As Integer, ByVal oldValue As Object, ByVal newValue As Object)
If oldValue <> newValue Then
Dim oldcust As Customer = CType(oldValue, Customer)
Dim newcust As Customer = CType(newValue, Customer)
oldcust.parent = Nothing
newcust.parent = Me
OnListChanged(New ListChangedEventArgs(ListChangedType.ItemAdded, index))
End If
End Sub
' Called by Customer when it changes.
Friend Sub CustomerChanged(ByVal cust As Customer)
Dim index As Integer = List.IndexOf(cust)
OnListChanged(New ListChangedEventArgs(ListChangedType.ItemChanged, index))
End Sub
' Implements IBindingList.
ReadOnly Property AllowEdit() As Boolean Implements IBindingList.AllowEdit
Get
Return True
End Get
End Property
ReadOnly Property AllowNew() As Boolean Implements IBindingList.AllowNew
Get
Return True
End Get
End Property
ReadOnly Property AllowRemove() As Boolean Implements IBindingList.AllowRemove
Get
Return True
End Get
End Property
ReadOnly Property SupportsChangeNotification() As Boolean Implements IBindingList.SupportsChangeNotification
Get
Return True
End Get
End Property
ReadOnly Property SupportsSearching() As Boolean Implements IBindingList.SupportsSearching
Get
Return False
End Get
End Property
ReadOnly Property SupportsSorting() As Boolean Implements IBindingList.SupportsSorting
Get
Return False
End Get
End Property
' Events.
Public Event ListChanged As ListChangedEventHandler Implements IBindingList.ListChanged
' Methods.
Function AddNew() As Object Implements IBindingList.AddNew
Dim c As New Customer(Me.Count.ToString())
List.Add(c)
Return c
End Function
' Unsupported properties.
ReadOnly Property IsSorted() As Boolean Implements IBindingList.IsSorted
Get
Throw New NotSupportedException()
End Get
End Property
ReadOnly Property SortDirection() As ListSortDirection Implements IBindingList.SortDirection
Get
Throw New NotSupportedException()
End Get
End Property
ReadOnly Property SortProperty() As PropertyDescriptor Implements IBindingList.SortProperty
Get
Throw New NotSupportedException()
End Get
End Property
' Unsupported Methods.
Sub AddIndex(ByVal prop As PropertyDescriptor) Implements IBindingList.AddIndex
Throw New NotSupportedException()
End Sub
Sub ApplySort(ByVal prop As PropertyDescriptor, ByVal direction As ListSortDirection) Implements IBindingList.ApplySort
Throw New NotSupportedException()
End Sub
Function Find(ByVal prop As PropertyDescriptor, ByVal key As Object) As Integer Implements IBindingList.Find
Throw New NotSupportedException()
End Function
Sub RemoveIndex(ByVal prop As PropertyDescriptor) Implements IBindingList.RemoveIndex
Throw New NotSupportedException()
End Sub
Sub RemoveSort() Implements IBindingList.RemoveSort
Throw New NotSupportedException()
End Sub
' Worker functions to populate the list with data.
Private Shared Function ReadCustomer1() As Customer
Dim cust As New Customer("536-45-1245")
cust.FirstName = "Jo"
cust.LastName = "Brown"
Return cust
End Function
Private Shared Function ReadCustomer2() As Customer
Dim cust As New Customer("246-12-5645")
cust.FirstName = "Robert"
cust.LastName = "Brown"
Return cust
End Function
End Class
注釈
このインターフェイスは、 クラスによって DataView 実装されます。 メソッドの実装は、 クラス内のそのメソッドの実装と同じ動作を DataView 示す必要があります。
メソッドまたは RemoveSort メソッドをApplySort呼び出すときは、 列挙を使用してイベントをListChangedReset発生させる必要があります。
メソッドを AddNew 呼び出すときは、適切なインデックスを ListChanged 保持する列挙を使用して ItemAdded イベントを発生させる必要があります。 追加された行は、コントロールで ESC キー DataGridView を押すと新しい行を削除できる状態です。 この行で ListChanged 2 回目の ItemAdded 列挙でイベントを発生させると、項目が "新しい" 状態ではない行であることが示されます。
項目を削除するか、新しい行で メソッドをCancelEdit呼び出す場合 (その行が実装されているIEditableObject場合)、適切なインデックスをItemDeleted持つ列挙を含むイベントを発生させるListChanged必要があります。
プロパティ
AllowEdit |
リストの項目を更新できるかどうかを示す値を取得します。 |
AllowNew |
AddNew() を使用してリストに項目を追加できるかどうかを示す値を取得します。 |
AllowRemove |
Remove(Object) または RemoveAt(Int32) を使用してリストから項目を削除できるかどうかを示す値を取得します。 |
Count |
ICollection に格納されている要素の数を取得します。 (継承元 ICollection) |
IsFixedSize |
IList が固定サイズかどうかを示す値を取得します。 (継承元 IList) |
IsReadOnly |
IList が読み取り専用かどうかを示す値を取得します。 (継承元 IList) |
IsSorted |
リストの項目が並べ替え済みかどうかを示す値を取得します。 |
IsSynchronized |
ICollection へのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。 (継承元 ICollection) |
Item[Int32] |
指定したインデックスにある要素を取得または設定します。 (継承元 IList) |
SortDirection |
並べ替えの順序を取得します。 |
SortProperty |
並べ替えに使用されている PropertyDescriptor を取得します。 |
SupportsChangeNotification |
リストまたはリスト内の項目が変更されたときに、ListChanged イベントを発生させるかどうかを示す値を取得します。 |
SupportsSearching |
リストが Find(PropertyDescriptor, Object) メソッドを使用した検索をサポートしているかどうかを示す値を取得します。 |
SupportsSorting |
リストが並べ替えをサポートしているかどうかを示す値を取得します。 |
SyncRoot |
ICollection へのアクセスを同期するために使用できるオブジェクトを取得します。 (継承元 ICollection) |
メソッド
Add(Object) |
IList に項目を追加します。 (継承元 IList) |
AddIndex(PropertyDescriptor) |
検索に使用されるインデックスに PropertyDescriptor を追加します。 |
AddNew() |
リストに新しい項目を追加します。 |
ApplySort(PropertyDescriptor, ListSortDirection) |
PropertyDescriptor と ListSortDirection に基づいて並べ替えを行います。 |
Clear() |
IList からすべての項目を削除します。 (継承元 IList) |
Contains(Object) |
IList に特定の値が格納されているかどうかを判断します。 (継承元 IList) |
CopyTo(Array, Int32) |
ICollection の要素を Array にコピーします。Array の特定のインデックスからコピーが開始されます。 (継承元 ICollection) |
Find(PropertyDescriptor, Object) |
指定された PropertyDescriptor を保持する行のインデックスを返します。 |
GetEnumerator() |
コレクションを反復処理する列挙子を返します。 (継承元 IEnumerable) |
IndexOf(Object) |
IList 内の特定の項目のインデックスを確認します。 (継承元 IList) |
Insert(Int32, Object) |
指定したインデックスの IList に項目を挿入します。 (継承元 IList) |
Remove(Object) |
特定のオブジェクトが IList 内にあるときに、最初に出現したものを削除します。 (継承元 IList) |
RemoveAt(Int32) |
指定したインデックスにある IList 項目を削除します。 (継承元 IList) |
RemoveIndex(PropertyDescriptor) |
検索に使用されるインデックスから PropertyDescriptor を削除します。 |
RemoveSort() |
ApplySort(PropertyDescriptor, ListSortDirection) を使用して並べ替えを適用した場合は、その並べ替えを削除します。 |
イベント
ListChanged |
リストまたはリスト内の項目が変更された場合に発生します。 |
拡張メソッド
Cast<TResult>(IEnumerable) |
IEnumerable の要素を、指定した型にキャストします。 |
OfType<TResult>(IEnumerable) |
指定された型に基づいて IEnumerable の要素をフィルター処理します。 |
AsParallel(IEnumerable) |
クエリの並列化を有効にします。 |
AsQueryable(IEnumerable) |
IEnumerable を IQueryable に変換します。 |
適用対象
.NET