【问题标题】:Can't get InvocationList from DataContextChanged无法从 DataContextChanged 获取 InvocationList
【发布时间】:2017-06-30 15:18:22
【问题描述】:

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

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

    public TestControl()
    {
        InitializeComponent();

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

【问题讨论】:

    标签: .net wpf delegates


    【解决方案1】:

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

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

    要调用GetInvocationList(),您需要访问委托字段,但这是private

    所以您可以为您自己的MyDataContextChanged 调用GetInvocationList(),因为它的支持字段是您自己的TestControl 类中的private

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

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 2023-03-14
      • 1970-01-01
      • 2021-08-17
      • 2022-01-10
      • 1970-01-01
      • 2017-11-01
      • 2016-05-19
      • 2020-12-24
      相关资源
      最近更新 更多