gpt4 book ai didi

c# - 如何找到 "RaisePropertyChanged"调用的所有处理程序?

转载 作者:行者123 更新时间:2023-11-30 15:28:25 28 4
gpt4 key购买 nike

我有一个类似于此的属性:

    private ISomething currentSomething;
public ISomething CurrentSomething
{
get { return currentSomething; }
set
{
if (!object.Equals(currentSomething, value))
{
currentSomething = value;
RaisePropertyChanged(() => CurrentSomething);
}
}
}

当 setter 被调用时,值被正确地传输到 currentSomething 字段。但是,在 RaisePropertyChanged(() => CurrentSomething); 行之后,currentSomething 字段中的列表之一删除了其中的两项。

我似乎很清楚,我的代码中的某些内容订阅了此属性更改的事件(并且正在修剪我需要单独留下的列表)。但是,我似乎找不到这个处理程序。

有没有办法找到 RaisePropertyChanged 事件的所有订阅者?

更新:
我弄清楚我的对象出了什么问题。它绑定(bind)到一个控件,该控件具有一个正在对其执行操作的 View 模型。如果有人有好的答案,我将保留这个问题,但我不再被困住。

最佳答案

您可以对事件使用 GetInvocationList() 方法。如果您在 myObject(MyClass 类型)实例上有一个 PropertyChanged 事件,那么您可以像这样获得订阅者:

        var methodInfo = typeof (MyClass.PropertyChangedDelegate).GetMethod("GetInvocationList");
var p = myObject.GetType().GetField("PropertyChanged", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(myObject);
var subscriberDelegates = (Delegate[])methodInfo.Invoke(p, null);
object[] subscriberObjects = subscriberDelegates.Select(sub => sub.Target).ToArray();

这甚至可以在定义事件的类之外工作。

关于c# - 如何找到 "RaisePropertyChanged"调用的所有处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com