- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在查看 INotifyPropertyChanged
中的 NotifyPropertyChanged()
并注意到在 Microsoft 的示例中,例如此处:
http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx
没有首先捕获委托(delegate)引用(正如它所说的那样,例如:Use of null check in event handler)
我查看了为我的 ServiceReferences 自动生成的 Reference.cs,此检查已完成。
所以我的问题是我应该这样做(以扩展方法等任何形式)吗?如果我不这样做,会有什么问题吗?
最佳答案
你是对的,应该做检查,他们的例子是错误的。
下面是标准代码。
private void NotifyPropertyChanged(String propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler (this, new PropertyChangedEventArgs(propertyName));
}
}
编辑:关于为什么需要这样做(以及它为什么有效)的进一步解释
在 MS 示例中,他们直接对 PropertyChanged 进行空检查,然后调用它。因此,PropertyChanged 有可能在 null 检查和调用之间变为 null。通过将委托(delegate)分配给局部变量,我们可以确保保留对委托(delegate)的引用,并且它不会在 null 检查和调用之间发生变化。
关于c# - NotifyPropertyChanged 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7913663/
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: typesafe NotifyPropertyChanged using linq expressions 我正在开
我刚刚根据 Rachel Lim 的 blog 实现了我的业务逻辑验证。 . 一切都运行良好,直到我决定在绑定(bind)到 的 View 中放置一个触发器。有效像这样的属性(property):
测试此属性的最佳方法是什么: public string ThreadId { get { return _threadId; } set {
我有以下 View 模型 [NotifyPropertyChanged] public class ActivateViewModel { public string Password { g
我正在尝试为 ListBox 捕获 SelectedItem,然后为 Button 触发数据模板单击事件。我在 notifypropertychanged 事件处理程序中放置了一个断点,但它从未触发。
我正在查看 INotifyPropertyChanged 中的 NotifyPropertyChanged() 并注意到在 Microsoft 的示例中,例如此处: http://msdn.micro
如果我更新的属性在绑定(bind)控件的调度程序以外的线程上抛出 NotifyPropertyChanged,更新是否会被强制编码到此调度程序? BackgrounWorker.Run() => {
您好,我有一个 DataGridCheckBoxColumn,我希望它在用户选中或取消选中 DataGridCheckBoxColumn 时立即在基础绑定(bind)对象上通知 propertycha
似乎有些人在 Silverlight 中更新文本 AutoCompleteBox 时遇到问题,遗憾的是我已经加入了这个行列。 我有一个像这样的名为 EditableCombo 的派生类; publ
我的应用程序具有定期数据库同步功能。每当发生同步时,所有输入控件的值都会重置为数据库中的当前值。 但是,当在 TextBox 中键入长文本时发生同步事件时,这非常不方便。 期望的行为是输入控件的值不设
我有一个 UserControl,它包含 bool 属性 A。在包含该 UserControl 的主窗口中,我必须根据 A 的值启用/禁用按钮。我试图像这样将 A 设置为公开和绑定(bind)按钮:
我现在已经为我的问题苦苦挣扎了一个星期,但我无法解决它。我正在编写一个只有一个窗口 (MainView) 的 MVVM WPF 应用程序。在此 Mainview 中,我想在需要时加载不同的 UserC
我正在使用 Android 的数据绑定(bind)库。我的数据对象扩展了 BaseObservable。 public static class SimpleData extends BaseObse
在我的新 WPF 应用程序中,我重用了一个模型类。在该模型类中,所有属性都在其 setter 中触发 NotifyPropertyChanged。在我的应用程序中,我并没有真正为单个属性触发 INPC
是否有类似 INotifyPropertyChanged 的接口(interface),其中事件参数包含正在更改的属性的旧值,或者我是否必须扩展该接口(interface)来创建一个接口(inte
我有一个组件,其中包含一个子组件列表(在父组件中使用 yield 绘制): parent-component for item in items child-component item=
表格 Build your own MVVM我有以下代码可以让我们进行类型安全的 NotifyOfPropertyChange 调用: public void NotifyOfPropertyChan
这是一个简化的示例,但很好地说明了我的问题。我有一个 PIN 码输入,带有数字按钮(1、2、3、4)。我的按钮上的操作应该设置一个属性 pinValue ,该属性将传递到包装的组件 pin-input
我对 INotifyPropertyChanged 的 PostSharp 实现没有什么问题。 PostSharp 在编译时添加了 PropertyChangedEventHandler Proper
我对 WPF 非常熟悉,但有一件事困扰着我。我正在使用 ReactiveUI 引发 INotifyPropertyChanged 事件。我有两个地方与此类似: public UiModel UiMo
我是一名优秀的程序员,十分优秀!