Wpf 继承是否与事件和委托有关?

Wpf 继承是否与事件和委托有关?,wpf,events,delegates,Wpf,Events,Delegates,几天来,我一直在阅读有关代表、活动和WPF的资料,我开始对其有一些了解,但有一些事情我还不清楚 在这个问题上,他们解释了如何在属性发生变化时引发事件 从我对事件的理解来看,当事件发生时,你想做一些事情,你需要在事件中添加一个函数,就像这样 Someclass.PropertyChanged += new PropertyEventHandler(somefunction) public void somefunction(object sender, EventArgs e){ //Do so

几天来,我一直在阅读有关代表、活动和WPF的资料,我开始对其有一些了解,但有一些事情我还不清楚

在这个问题上,他们解释了如何在属性发生变化时引发事件

从我对事件的理解来看,当事件发生时,你想做一些事情,你需要在事件中添加一个函数,就像这样

Someclass.PropertyChanged += new PropertyEventHandler(somefunction)

public void somefunction(object sender, EventArgs e){ //Do some code}
但几乎在每个示例中,当他们使用从未使用过的
INotifyPropertyChanged
时,他们都设法激活
事件属性changed

我真的搞不懂


如果使用已声明的事件实现接口,是否需要向新的eventhandler添加函数?

无需为其提供处理程序。您实现了
PropertyChanged
,以便其他一些代码可以处理该事件。其他代码可能是您的,但在
INotifyPropertyChanged
的情况下,通常是视图中的绑定订阅
PropertyChanged
事件

您可以声明事件,而无需向其添加自己的处理程序。一旦你费心宣布,你真的应该提出这个事件,但你不必处理它。我所说的提高是指:

protected void OnPropertyChanged(String propName)
{
    var handler = PropertyChanged;

    //  If nobody gave it a handler, it'll be null, so check for that. 
    if (handler != null)
    {
        //  This is what we refer to when we say "raise the event": handler has 
        //  references to at least one handler (because it's not null), and possibly
        //  dozens. This one "method call" here will magically call all of them. 
        handler(this, new PropertyChangedEventArgs(propName));
    }
}

public String Name {
    get { return _name; }
    set {
        if (_name != value) {
            _name = value;
            //  Call this method to raise PropertyChanged
            OnPropertyChanged("Name");
        }
    }
}
private String _name;
宣布一个事件只是说“万一有人关心这件事的发生,我会在它发生时提出一个事件。”


也许您希望在自己代码的其他部分中处理该事件。在WPF中,您实现了
INotifyPropertyChanged
,因此当用户界面绑定到类实例的属性时,它将获得所需的通知

不完整和不清楚。创建一个最小的样本。但是如果你没有用一些东西调用事件,它不是没有用吗?@Bojje你说的“调用”是什么意思?你是在谈论举办活动还是处理活动?我试着在我的回答中解决这两个问题。不,对不起,太晚了。。我要睡一觉,明天再谈这个:)很高兴你能回答我。@Bojje无论如何,是的,如果你从来没有提出过一个活动,就不要麻烦去实施它。如果您可以确定没有人会处理该事件,那么您也不需要实现它。许多类不需要实现INotifyPropertyChanged。然而,他们中的许多人确实如此。如果类具有绑定到视图中的控件属性的属性,并且这些属性有可能在构造函数之外发生更改,那么它需要实现该接口。好的,让我们看看我现在是否能讲得通。当您的意思是引发事件时,您的意思是
OnPropertyChanged
?因为我认为这只是一个函数?因此,如果您不使用
Someclass.PropertyChanged+=neweventhandler(//some code)
在事件发生时“实际”执行某些操作,这难道不会使事件完全“无用”吗?