无法从DataContextChanged获取InvocationList

时间:2017-06-30 15:18:22

标签: .net wpf delegates

为什么第二行GetInvocationList()没有编译? DataContextChanged事件声明与MyDataContextChanged相同。

public partial class TestControl : UserControl
{
    public event DependencyPropertyChangedEventHandler MyDataContextChanged;

    public TestControl()
    {
        InitializeComponent();

        var invocationList = MyDataContextChanged.GetInvocationList();
        //var invocationList = DataContextChanged.GetInvocationList(); NotWorking
     }

1 个答案:

答案 0 :(得分:0)

编译器将public event翻译为private委托支持字段和public addremove方法。

因此,在声明类之外,您只能使用event添加或删除处理程序(通过+=-=运算符)。但您无法访问支持字段。

要致电GetInvocationList(),您需要访问代理字段,但这是private

因此,您可以为您自己的GetInvocationList()致电MyDataContextChanged,因为其支持字段在您自己的private类中为TestControl

基础类DataContextChangedprivate事件的支持字段为TestControl(不确定UserControl还是层次结构的更高层)。因此,您无法从派生的TestControl类中进行访问。