方法 : INotifyPropertyChanged インターフェイスを実装する
更新 : 2007 年 11 月
INotifyPropertyChanged インターフェイスを実装する方法を次のコード例に示します。このインターフェイスを Windows フォーム データ バインディングで使用されるビジネス オブジェクトに実装します。実装すると、インターフェイスは、ビジネス オブジェクトでのバインド コントロールのプロパティの変更内容と通信します。
使用例
' This class implements a simple customer type
' that implements the IPropertyChange interface.
Public Class DemoCustomer
Implements INotifyPropertyChanged
' These fields hold the values for the public properties.
Private idValue As Guid = Guid.NewGuid()
Private customerName As String = String.Empty
Private companyNameValue As String = String.Empty
Private phoneNumberValue As String = String.Empty
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
' The constructor is private to enforce the factory pattern.
Private Sub New()
customerName = "no data"
companyNameValue = "no data"
phoneNumberValue = "no data"
End Sub 'New
' This is the public factory method.
Public Shared Function CreateNewCustomer() As DemoCustomer
Return New DemoCustomer()
End Function
' This property represents an ID, suitable
' for use as a primary key in a database.
Public ReadOnly Property ID() As Guid
Get
Return Me.idValue
End Get
End Property
Public Property CompanyName() As String
Get
Return Me.companyNameValue
End Get
Set
If value <> Me.companyNameValue Then
Me.companyNameValue = value
NotifyPropertyChanged("CompanyName")
End If
End Set
End Property
Public Property PhoneNumber() As String
Get
Return Me.phoneNumberValue
End Get
Set
If value <> Me.phoneNumberValue Then
Me.phoneNumberValue = value
NotifyPropertyChanged("PhoneNumber")
End If
End Set
End Property
End Class
// This class implements a simple customer type
// that implements the IPropertyChange interface.
public class DemoCustomer : INotifyPropertyChanged
{
// These fields hold the values for the public properties.
private Guid idValue = Guid.NewGuid();
private string customerName = String.Empty;
private string companyNameValue = String.Empty;
private string phoneNumberValue = String.Empty;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
// The constructor is private to enforce the factory pattern.
private DemoCustomer()
{
customerName = "no data";
companyNameValue = "no data";
phoneNumberValue = "no data";
}
// This is the public factory method.
public static DemoCustomer CreateNewCustomer()
{
return new DemoCustomer();
}
// This property represents an ID, suitable
// for use as a primary key in a database.
public Guid ID
{
get
{
return this.idValue;
}
}
public string CompanyName
{
get {return this.companyNameValue;}
set
{
if (value != this.companyNameValue)
{
this.companyNameValue = value;
NotifyPropertyChanged("CompanyName");
}
}
}
public string PhoneNumber
{
get { return this.phoneNumberValue; }
set
{
if (value != this.phoneNumberValue)
{
this.phoneNumberValue = value;
NotifyPropertyChanged("PhoneNumber");
}
}
}
}
コードのコンパイル方法
上記のコード例をコンパイルするには
- コードを空白のコード ファイルに貼り付けます。Main メソッドを含む Windows フォーム アプリケーションのビジネス オブジェクトを使用します。
参照
処理手順
方法 : PropertyNameChanged パターンを適用する
方法 : BindingSource と INotifyPropertyChanged の各インターフェイスを使用して変更通知を発生させる