问题标签 [propertychanged]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5669 浏览

wpf - wpf 更新 ListViewItem 背景属性

我有一个绑定到 ThreadSafeObservableCollection 的列表视图。这些项目中的每一个的背景都设置为一个通过颜色转换器运行的枚举,这是这两个设置的代码。

我想要发生的是 listviewItem 的背景颜色将根据枚举值从 Red - Yellow - Green 变化。根据业务逻辑规则更新。这目前有效,但仅适用于项目的初始显示。当我更改 listItemView 绑定到的对象的“状态”属性时,背景不会更新。如果我从集合中删除对象,更改状态,然后再次将其添加到集合中,则背景会更新。
我已经尝试制作对象 IPropertyNotify,并在状态属性更改设置器上抛出事件,但这不起作用。

有谁知道我是否需要做一些特别的事情才能更新列表视图项目的背景。我也对如何解决这个问题的其他想法持开放态度,谢谢。这是 ListView 的 XAML。EncoderService.Encoders 是我的 Encoder 对象的 ThreadSafeObservableCollection。

0 投票
4 回答
11888 浏览

c# - ObservableCollection PropertyChanged 事件

我想子类化为ObservableCollection它添加一个属性。不幸的是,该PropertyChanged事件受到保护。基本上,我想对它进行子类化,SelectedItem以便在我的 MVVM WPF 应用程序中为列表绑定一个。

这是我班级的骨架:

但我不能执行以下操作:

因为访问限制。这使我提出了一个更深层次的问题。UI 如何通知PropertyChanged事件(例如 Count 属性)?请注意,我不能在代码隐藏中做到这一点。

头晕脑胀,有大神能指教一下吗?

0 投票
1 回答
1542 浏览

configuration - 监控 app.config 中设置的更改

当我使用类型安全的应用程序设置时,我的 app.exe.config 文件中有这样的内容:

Settings.Designer.vb 执行以下操作:

我可以通过以下方式访问设置:

Settings.IntervalTimeout

从外部监视对此设置的更改的最佳做法是什么。即,该设置由作为服务运行的应用程序使用,当有人打开相应的配置文件并将 IntervalTimeout 更改为假设为 30 时,服务应用程序会收到通知并执行我告诉它重新配置的任何操作。

通常,我会在初始化期间使用这样的东西:

然后实现一个 Eventhandler 来检查已更改的属性的名称并做出适当的反应。

但是,PropertyChanged 事件仅在对属性调用 Set 方法时触发,而不是在有人直接更改文件中的数据时触发。当然,这本来就是天堂,但可以理解的是,这不是它的工作方式。;-)

最有可能的是,我会实现一个文件系统观察器来监视文件的更改,然后重新加载配置,找出更改的内容,然后做任何必要的事情来反映这些更改。

有谁知道更好的方法?甚至是受支持的?

0 投票
1 回答
160 浏览

c# - WPF 数据绑定的一些问题,但您必须猜测是什么类型

我正在尝试在我的 wpf 项目中实现属性更改事件(或任何合适的事件),并且我正在尝试找到执行此操作的最佳方法。

我有这个标题,它有一个展开/折叠图标,在我的窗口中,我可能有多个标题。我希望在开始时列出所有标题但当用户展开某些标题(不是全部)时折叠默认值,当我单击窗口上的“刷新”以更新标题时,我希望它保持原样那是在刷新之前。

所以,如果标题 1 和 2 被展开,而 3 和 4 被折叠,当按下刷新按钮时,我希望它真正记住这一点。问题是,当我单击“刷新”时,它会刷新整个视图,因此会丢失信息。

我试图在承载这些标题的实际类中拥有一个集合来存储信息,因此当标题展开或折叠时,它会通知集合展开/折叠已触发,我想在集合,因此当单击刷新按钮时,如果标题在刷新之前已经存在于视图中,我可以将其与 GUID 进行比较,使用存储的展开/折叠信息更新新标题,因此即使在刷新之后,它将保持它的状态。

0 投票
1 回答
3071 浏览

wpf - WPF CustomControl:在 PropertyChangedCallback 之后调用 OnApplyTemplate

我正在创建一个具有 PropertyChangedCallback 依赖项属性的 WPF CustomControl。在该回调方法中,我尝试在使用 GetTemplateChild() 方法从 OnApplyMethod 检索的控件的某些部分上设置值。

问题是 PropertyChangedCallback (在某些系统上)在 OnApplyTemplate 之前调用,因此控制部分仍然为空。

我目前使用的解决方法是将 PropertyChangedCallback 中的 e.NewValue 保存到成员变量中,然后在 OnApplyTemplate() 中调用 SetValue(dp, _savedValue)。

处理这个问题的正确方法是什么,或者我是否已经在使用最好的解决方案?

0 投票
1 回答
1604 浏览

java - 使用 PropertyChangeListener 锁定策略

我已经定义了一个具有许多“可观察”属性的类。该类在内部包含一个执行 I/O 的线程;例如

我的问题是:我应该避免在持有类锁的同时触发属性更改事件吗?...或者也许我应该从单个专用线程(例如“事件多播”线程)触发属性更改事件?

当前的设计导致死锁,线程 A 在外部类中取出锁Bar,然后尝试调用方法Foo并取出第二个锁。但是,同时 I/O 线程调用setState(State)获取 lock on Foo,这会将属性更改事件传播到包含类Bar并尝试获取此类上的锁......导致死锁。换句话说,属性更改回调设计意味着我无法有效控制获取锁的顺序。

我目前的解决方法是创建状态volatile并删除synchronized关键字,但这似乎是一个杂项;一方面,这意味着无法保证触发属性更改事件的顺序。

0 投票
1 回答
331 浏览

inotifypropertychanged - PropertyChanged 事件,OnClick 时引发?

我有一个 WinForms 应用程序,其中包含一些实现 INotifyPropertyChanged 的​​业务对象,并通过表单上的一些控件和 BindingSource 挂钩 PropertyChanged 事件,这将事件引发回我的业务对象层...

只有一个问题 - 一切正常,除非只有当控件失去焦点时。例如,用户更改了一些文本字段,但他必须在点击“保存”按钮之前实际单击某个其他控件(例如,他必须将焦点放在另一个控件上)。

有没有办法将它连接到 OnClick 或其他东西,以便在用户键入文本时(甚至在他更改下拉值之后)将更改传播到我的业务对象层,这样我就不必强迫用户在他可以保存之前单击不同的文本框?

谷歌搜索让我无处可去,只能找到有关如何在 WPF =( 中轻松执行此操作的示例。但没有 WinForms 示例...

请指教,

德鲁

0 投票
2 回答
8709 浏览

c# - C# - 如何根据对另一个属性(ObservableCollection)的更改来更改属性的值?

当出版物的 Read 属性发生变化时,如何更改 TotalPublicationsRead 的值?

提前致谢。

0 投票
2 回答
184 浏览

.net - 为什么 .NET 在接收到 INotifyPropertyChanged.PropertyChanged 事件时会读取未受影响的属性值?

我是数据绑定的新手,今天遇到了以下我无法理解的奇怪现象:

我有一个带有两个标签(labelA 和 labelB)和两个按钮(buttonA 和 buttonB)的表单。

表单承载一个具有两个属性(CountA 和 CountB)的对象(称为“formState”)。labelA.Text 数据绑定到 formState.CountA,labelB.Text 数据绑定到 formState.CountB。

当 buttonA 被按下时,它使 formState 以“CountA”作为属性名称引发 PropertyChange 事件。当 buttonB 被按下时,它会引发 formState.PropertyChange,并将“CountB”作为属性名称。

我希望按下 buttonA 时只有 labelA 得到更新,按下 buttonB 时只有 labelB 得到更新。但是,当我按下任何按钮时,两个标签都会更新。我可以看到这一点,因为每次读取它们的值时 CountA 和 CountB 属性都会递增并返回一个计数器。代码如下。

有人对这种行为有解释吗?

0 投票
2 回答
4710 浏览

c# - C# - 如何确定属性是否已更改

我需要知道是否更改了公共属性(具有 getter 和 setter)。该属性在一个简单的类中(没有用户控件/组件等)。
是否有一种优雅的方式来订阅某种事件,该事件会在属性更改时发出通知?
我试图看看微软在他们的 Binding 对象中做了什么(使用反射器),这导致我探索 PropertyDescriptor.AddValueChanged 方法,但它对我没有用。也许它只适用于组件/用户控件......

有什么建议么?

谢谢,
阿迪巴尔达