- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类似于此的属性:
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/
我不确定为什么要使用 RaisePropertyChanging , 当通知 View fx: private LoggingLvl _myLoggingLvl; public Loggin
在这里,我向我的 View 模型添加了一个模型: public dal.UserAccount User { get { return _user; } set {
我已经将 MVVM 与我的 WPF 应用程序一起使用了一段时间,但是我试图让一个按钮保持禁用状态,直到它可以启用为止。没问题,我将在 ViewModel 中创建一个 bool 并将其绑定(bind)到
我有一个按钮,其内容与 ViewModel 的名为 Test 的属性绑定(bind)。 单击按钮时,我正在更改其内容 private void button1_Click(object sender
我有一个模型用户: public class User { public string Name { get; set; } public int Level { get; set;
为了在通用应用程序中获取 MvvmCross PropertyChanged 事件,我必须设置 ShouldAlwaysRaiseInpcOnUserInterfaceThread(false)。你能
我在模型类的 IDataErrorInfo 的实现部分中编写了此代码,以便在清除错误后清除错误。 我不明白这里用空字符串引发了哪个属性刷新? if (raiseNotification)
我有以下用于单选按钮绑定(bind)的类 public class RadioButtonSwitch : ViewModelBase { IDictionary _optio
我无法在 View Model 的 SET 属性中定位断点,因此默认值未更改。 (Get - 没问题,它用有效的默认值初始化我的文本框。) 我有一个model.cs定义公共(public)字符串字
如果我想通过 RaisePropertyChanged 更新我的 UI,我会遇到一个奇怪的行为。我使用 this post 的第二个解决方案(由 Johnathan1 提供) :我实现了 RadioB
我正在使用 mvvm-light,我注意到有关 RaisePropertyChanged 的这种奇怪行为。 xaml: 可观察类: public class A : ObservableObj
根据 MSDN doc on PropertyChanged ,如果将空字符串传递给该方法,则会刷新所有属性。使用MvvmLight RaisePropertyChanged 时有这样的事情吗?传递
我目前正在学习 MVVM,我不明白 RaisePropertyChanged 有多重要 例如这个函数: public City SelectedCity { get {
我在 Windows Phone Silverlight 应用程序中使用 MVVM Light。 我真的不明白 RaisePropertyChanged 应该如何工作;让我解释一下,用这样的代码 pr
我正在寻找一种解决方案,以在其中一个内部属性发生变化时触发整个属性的 PropertyChanged。所以这是模型: public class MainStatus : ObservableObjec
由于某种原因,我无法让 UI 响应 RaisePropertyChanged。卡住了。 CurrentClient 是不向 UI 触发的部分。真的很奇怪。 希望有人可以帮助我。谢谢斯科特 public
我有 public override bool RelatedProperty { get { return this.SomeProperty > 0; }
NotificationObject 中此方法有一个重载:- protected void RaisePropertyChanged(Expression> propertyExpression);
当我的 ViewModel 更改时,我无法让我的 UI 更新两个列表框以正确更新。 首先,页面背后的基本逻辑: Movie 是一个带有标题的对象,以及各种MovieDetails。一些 MovieDe
我有一个类似于此的属性: private ISomething currentSomething; public ISomething CurrentSomething {
我是一名优秀的程序员,十分优秀!