programing

[알림]이란 무엇입니까?속성 변경됨INOTIFY를 구현하는 경우 C#에서 Invocator]속성이 변경되었습니까?

newsource 2023. 5. 10. 21:12

[알림]이란 무엇입니까?속성 변경됨INOTIFY를 구현하는 경우 C#에서 Invocator]속성이 변경되었습니까?

두 가지 유형의 구현이 있습니다.INotifyPropertyChanged

  • 첫 번째는:

    public abstract class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    
  • 두 번째:

    public abstract class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    

두 번째에는 추가 속성이 있습니다.[NotifyPropertyChangedInvocator]진행 중인OnPropertyChanged

내 경우 둘 다 동일하게 작동하지만 무엇을, 왜, 언제 사용해야 하는지는 동일합니다.[NotifyPropertyChangedInvocator]이것의 이점은 무엇입니까?인터넷에 검색해봤지만 좋은 답을 찾을 수 없었습니다.

그것은 그들의 주석에서 나온 리샤퍼 속성입니다 - 당신에게 경고를 주고 당신의 코드가 의심스러워 보이도록 디자인되었습니다 :)
고려 사항:

public class Foo : INotifyPropertyChanged 
{
     public event PropertyChangedEventHandler PropertyChanged;
     
     [NotifyPropertyChangedInvocator]
     protected virtual void NotifyChanged(string propertyName) { ... }
  
     private string _name;
     public string Name {
       get { return _name; }
       set { 
             _name = value; 
             NotifyChanged("LastName");//<-- warning here
           } 
     }
   }

와 함께[NotifyPropertyChangedInvocator]의 속성NotifyChangedmethodResharper는 (아마도) 잘못된 값으로 메소드를 호출하고 있다는 경고를 제공합니다.

이제 Resharper는 변경 알림을 만들기 위해 메서드를 호출해야 한다는 것을 알고 있으므로 일반 속성을 변경 알림과 함께 속성으로 변환하는 데 도움이 됩니다.ReShaper 제안 사항이 표시된 Visual Studio 스크린샷
다음으로 변환:

public string Name
{
  get { return _name; }
  set
  {
    if (value == _name) return;
    _name = value;
    NotifyChange("Name");
  }
}



이 예는 의 설명서에서 나온 것입니다.[NotifyPropertyChangedInvocator]속성은 다음과 같습니다.
여기에 이미지 설명 입력

NotifyPropertyChangedInvocator리샤퍼 기능입니다.

코드에서 간단히 제거하여 작동할 수 있습니다.

여기에도 비슷한 질문이 있었습니다.

[알림]을 받는 방법을 아는 사람이 있습니까?속성 변경됨호출기]

언급URL : https://stackoverflow.com/questions/23213146/what-is-notifypropertychangedinvocator-in-c-sharp-when-implements-inotifyprope