CallerMemberName in an extension (INotifyPropertyChanged)

前端 未结 1 533
臣服心动
臣服心动 2021-01-29 05:05

I am currently implementing an Extension for the INotifiyPropertyChanged interface, you can read this:

INotifyPropertyChanged - Event stays null

for furhter info

1条回答
  •  粉色の甜心
    2021-01-29 05:52

    Simply, it isn't possible. You need 3 pieces of information:

    • the event-handler instance (this.PropertyChanged, on the left)
    • the event-name (propertyName, supplied by the compiler)
    • the sender (sender)

    sender cannot be inferred from any of the other information, and there is no compiler option to provide it. However, frankly, I would simply use an instance method instead:

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if(handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    

    Then the caller simply issues:

    OnPropertyChanged(); // job done
    

    You could of course have OnPropertyChanged call your static method, but that seems unnecessary.

    In some ways it feels like we should be able to just pass in the INotifyPropertyChanged instance to use for both sender and to access the PropertyChanged, but of course we can't get the actual delegate from an event declaration.

    0 讨论(0)
提交回复
热议问题