INotifyPropertyChanged
を実装するとき、私はpropertyName
の意味を決して確かめませんでした。私はNotifyPropertyChanged(string propertyName)
からpropertyName
引数わからなかったINotifyPropertyChangedとpropertyName
public class Data : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName = "") {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
private string itsID;
public string ID {
get { return itsID; }
set {
if (itsID != value) {
itsID = value;
NotifyPropertyChanged("ID");
}
}
}
:だから、一般的に、あなたはとしてINotifyPropertyChanged
を実装します。
- 任意の文字列(上記の例では「MyID」など)を使用できますか?
- .NETはReflectionを使用してクラス内のプロパティと整列させるので、プロパティの名前と正確に一致する必要がありますか?
propertyName
がProperty
の名前と正確に一致しない場合、.NETはオブジェクト全体をchanged
と見なしますか?
'if(PropertyChanged!= null)'を実行しているときにこれを避けてください。 'null'チェック後に' PropertyChanged'チェックが実際に 'null'になる可能性があります。代わりに、ローカル変数を最初に設定し、次にチェックする方が安全です。例えば'var handler = PropertyChanged; if(handler!= null){handler()... // raise} ' - あるいはC#6から、新しい" null条件演算子 "を使うことができます:' PropertyChanged?.Invoke(...) 'は二倍になります'ヌル'チェック*と*を一度に起動します。 –
ここではかなり説明しています(https://www.cs.colorado.edu/~kena/classes/5448/f12/presentation-materials/ellis.pdf)。これは.NETソースコードで、これらすべての実際のトラッキング(https://referencesource.microsoft.com/#System.Data.Services.Client/Client/System/Data/Services/Client/Binding/BindingObserver.cs,2ac792c61e2e7eb2,references)。 WPFは基本的にプロパティー変更イベントをサブスクライブし、イベント引数を使用します。イベント引数の1つはIDに使用する文字列(MyIDなど)であり、それを使用してコントロールの更新を行います。 – Alexandru