问题标签 [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.
c# - WPF:PropertyChangedCallback 仅触发一次
我有一个用户控件,它公开了一个名为 VisibileItems 的 DependencyProperty 每次更新该属性时,我都需要触发另一个事件。为此,我添加了一个带有 PropertyChangedCallback 事件的 FrameworkPropertyMetadata。
由于某种原因,此事件仅被调用一次,并且不会在下次更改 VisibleItems 时触发。
XAML:
CurrentTables 是 MyViewModel 上的 DependencyProperty。CurrentTables 经常更改。我可以将另一个 WPF 控件绑定到 CurrentTables,并且我可以看到 UI 中的更改。
这是我用 PropertyChangedCallback 连接 VisibleItems 的方式
通过进入 VisiblePropertyChanged,我可以看到它在第一次设置 CurrentTables 时被触发。但不是以后的时间。
更新
正如你们中的一些人质疑 CurrentTables 的修改方式,它在更改时完全重新分配:
每次更改都会调用此行,但我的 VisiblePropertyChanged 处理程序仅在第一次调用。
更新
如果我直接分配 VisibleItems,则每次都会调用处理程序!
因此,看起来问题源于 DependencyProperty (VisibleItems) 监视另一个 DependencyProperty (CurrentTables)。不知何故,绑定适用于第一次属性更改,但不适用于后续更改?正如你们中的一些人建议的那样,尝试用 snoop 来检查这个问题。
wpf - WPF Catch ObservableCollection 的项目属性更改
嗨,我尝试了几种方法,但要么不成功,要么不理想。我只是想捕捉集合中任何项目的 PropertyChanged 事件。我现在已经手动连接了它,但我想知道是否有更优雅的解决方案:
然后我可以轻松地附加到集合的 MyPropertyChanged 事件,它运行良好但更优雅的任何人?
提前致谢
wpf - 在 WPF 中,为什么 TemplateBinding 不能在 Binding 的地方工作?
好吧...这让我摸不着头脑。我有两个 WPF 控件——一个是用户控件,另一个是自定义控件。我们称它们为 UserFoo 和 CustomFoo。在 CustomFoo 的控制模板中,我使用了一个 UserFoo 实例,它是一个命名部分,因此我可以在应用模板后访问它。这很好用。
现在 UserFoo 和 CustomFoo 都Text
定义了一个属性(独立地,即不是使用 AddOwner 的共享 DP。不要问...),它们都是这样声明的...
请特别注意,模式设置为 TwoWay,UpdateSourceTrigger 设置为 PropertyChanged,同样适用于两者。
因此,在 CustomFoo 的样式模板中,我想将 CustomFoo 的 Text 属性作为源绑定到内部 UserFoo 的 Text 属性。通常,这很容易。您只需将 UserFoo 的 text 属性设置为“{TemplateBinding Text}”,但由于某种原因,它只是一种方式(即 UserFoo 是从 CustomFoo 正确设置的,但不是相反),即使再次将两个 DP 设置为双向!但是,当使用相对源绑定而不是模板绑定时,效果很好!嗯……什么??
那么给了什么?我错过了什么?
silverlight - Silverlight:设置属性直接删除数据绑定?
我正在修改一个 Silverlight 项目,该项目大量使用后面的代码来设置属性等。这是几年前创建的,或多或少是从 WinForms 项目移植过来的。
我注意到的问题是,当我为属性设置数据绑定时,在这种情况下为可见性,如果该属性直接在后面的代码中设置,则数据绑定被删除。我什至在 PropertyChanged 事件上设置断点来验证情况是否如此。
我已经做了很多 WPF 开发,但从未注意到这一点。这是正常的,我错过了还是有些不对劲?
silverlight - Silverlight 中的 UpdateSourceTrigger PropertyChanged?
我相信你们中的大多数人都遇到过这种情况,当您输入一个您喜欢的文本框以根据已输入的内容过滤 ViewCollection 时。
它在 WPF 中非常简单,只需将文本绑定的 UpdateSourceTrigger 更改为 PropertyChanged。
正如您所期望的,Silverlight 没有它。相反,只有一个默认值和显式值。
我有想法将交互行为绑定到文本框的 TextChanged 事件。您会推荐这种方法还是有更好的方法?
wpf - 模板列中带有文本框的 WPF DataGrid 未触发属性已更改
我有一个带有模板列的数据网格,该模板中有一个文本框。它绑定到构成 itemssource 的集合中对象的“数量”属性。数量是一个整数。当我将一个项目添加到数据网格时,我正在向该项目的 PropertyChanged 事件添加一个事件处理程序:
当用户在文本框中输入一个整数时,这可以正常工作...... p_PropertyChanged 处理程序会触发,我可以禁用按钮并根据需要更改数量。当用户输入一个非整数时,处理程序不会被调用,我只是在文本框周围得到一个红色轮廓。因此,我无法在需要时禁用必要的按钮(它们应该被禁用,数量不合法。)有什么办法可以解决这个问题吗?
编辑:我尝试将 Quantity 属性更改为字符串,这导致在输入非整数值时调用属性更改处理程序。但是,我随后向文本框添加了验证以检查这一点,如果 Validate 方法返回 false,则再次停止命中属性更改处理程序。有没有办法同时获得验证和属性更改通知?
编辑2:这是我在另一个位置遇到的这个问题的另一个实例。我有一个用于添加/编辑电话号码的表格。电话号码文本框如下所示:
单击保存按钮后,我需要检查我的视图模型是否有效,因为如果不是,我不想运行保存命令。但是,似乎没有任何方法可以做到这一点,因为如果验证失败,那么 Phone.Number 属性的值为 null,我无法检查是否应该运行 save 命令。我要么需要访问错误状态(我认为它可以通过 Validation.GetErrors 工作,但没有),要么需要访问文本框中的实际文本,这在视图模型中不可用。
c# - 在 TextBox 条目暂停期间引发 PropertyChanged 事件?
PropertyChanged
我想知道当用户在输入文本时暂停时是否可以引发事件TextBox
?或者更具体地说,我想X
在用户停止输入文本框后几秒钟运行一个方法。
例如,我有一个带有 TextBox 的表单,没有别的。用户在 TextBox 中键入 1-9 位的 Id 值,一个相当消耗资源的后台进程加载记录。
我不想使用,UpdateSouceTrigger=PropertyChanged
因为这会导致在输入字符时运行资源密集型后台进程,因此 9 位 ID 号从这些进程中的 9 个开始。
我也不想使用UpdateSourceTrigger=LostFocus
,因为表单上没有其他内容可以使 TextBox 失去焦点。
那么有没有办法让我的后台进程仅在用户在输入 ID 号时暂停后才运行?
java - PropertyChangeSupport for SpinnerNumberModel
I want to listen to the changes of the value of the SpinnerNumberModel for a JSpinner.
I create a PropertyChangeSupport and put the model into it.
I need the propertyChangeListener, because it shows me the old and new value of the property.
The snippet doesn't work: the propertyChange
method prints nothing, when I click on the JSpinner.
A simple ChangeListener give only the new value, but I need also the old value, how can I get it?
wpf - WPF 中 PropertyChanged UpdataSourceTrigger 的奇怪行为
我有一个这样的实体:
然后我在 XAML 中有三个文本框和一个按钮:
奇怪的是,实体“Person”并没有实现 INotifyPropertyChanged,但是当一个文本框被更改时,它会修改源(Person 对象),但是我们没有引发属性更改事件而是其余两个文本框自动改变。
当按钮点击时,我们直接通过如下代码更新源代码:
它不更新。所以我认为如果Person类实现了INotifyPropertyChanged,这种行为是正常的,但是现在该类没有实现接口,但它也更新了接口。如果您有任何线索,请告诉我原因。谢谢。
silverlight - 绑定到字典 ValueCollection
我有一个字典,其 ValueCollection 由类组成,在我的 VM 中作为属性公开,并绑定到 UI 上的 DataGrid。我的问题是字典是异步填充的(它实际上是一个 ObservableDictionary,所以我可以监视更改事件),并且网格中没有显示任何结果。每当将项目添加到字典时,我都会在 VM 中为 DataGrid 绑定到的属性引发 PropertyChanged 事件,但无法获得任何结果。我已经验证事件确实会触发。
如果我使用直接的 ObservableCollection 而不是 ObservableDictionary,一切都很好,我什至不需要提升 PropertyChanged,但我真的想使用 Dictionary 来保存我的集合,以便在每个条目上保留一个唯一键。
我做错了什么,还是有一个我可以使用的不同集合的解决方法?我还尝试在值集合上调用 .ToObservable() 或 .ToEnumerable() 进行绑定。