속성 값 변경에 대한 이벤트 발생
속성 작업 시 속성 값이 변경될 때마다 이벤트를 트리거해야 할 수도 있습니다.
질문:
값이 변경될 때마다 이벤트가 시작되도록 요구하는 ImageFullPath1이라는 속성이 있습니다. INotifyPropertyChanged가 있음에도 불구하고 요구 사항은 이벤트를 사용하여 솔루션을 구현하는 것입니다.
답변:
INotifyPropertyChanged 인터페이스는 실제로 이벤트를 기반으로 합니다. 소비자가 구독할 수 있는 이벤트인 PropertyChanged라는 단일 멤버가 있습니다.
그러나 Richard가 제안한 솔루션은 신뢰할 수 없습니다. 더 안전한 구현은 다음과 같습니다.
public class MyClass : INotifyPropertyChanged { private string imageFullPath; protected void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, e); } protected void OnPropertyChanged(string propertyName) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } public string ImageFullPath { get { return imageFullPath; } set { if (value != imageFullPath) { imageFullPath = value; OnPropertyChanged("ImageFullPath"); } } } public event PropertyChangedEventHandler PropertyChanged; }
이 구현의 특징:
추가 속성별 이벤트:
이벤트도 생성하려는 경우 ImageFullPath와 같은 특정 속성의 변경 사항에 대해 다음을 수행할 수 있습니다. 추가:
protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event EventHandler ImageFullPathChanged;
OnPropertyChanged("ImageFullPath") 후에 OnImageFullPathChanged(EventArgs.Empty)를 호출합니다.
.Net 4.5의 CallerMemberAttribute:
.Net 4.5 이상에서는 CallerMemberAttribute를 사용하면 소스 코드에서 하드 코딩된 속성 이름을 제거할 수 있습니다.
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } public string ImageFullPath { get { return imageFullPath; } set { if (value != imageFullPath) { imageFullPath = value; OnPropertyChanged(); } } }
위 내용은 C#에서 속성 값 변경에 대한 이벤트를 발생시키는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!