问题标签 [inotifycollectionchanged]
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.
android - 无法在 TwoWay 模式下绑定 MvxBindableListView
我正在尝试在TwoWay模式下绑定MvxBindableListView ,以便当我在ViewModel中设置它的值(通过按钮的单击命令)时它在视图中更新。目前,它仅在开始/tabchange 完全加载布局时更新...
视图模型是:
视图中的 .axml是:
c# - 为什么DataGrid调用集合的IndexOf传递类型ItemcControl.ItemInfo的对象?
我创建SelectionHelper
了DataGrid
它允许在两个方向上绑定所选项目。
在此辅助手册中,我ScrollIntoView
在从ViewModel的选择更改时呼叫第一个选定的项目。通话成功返回。但是稍后在 UI 的消息队列中的某个地方发生了一些事情,并且调用了我的集合的 IndexOf。
由于 UI 虚拟化,我怀疑它是异步的。DataGrid
绝对是想知道项目的索引。但是我无法理解为什么它会放置ItemsControl.ItemInfo
而不是 item。
这是错误还是未记录的功能?
我的集合实现了这些接口:IList<T>
, IList
,INotifyCollectionChanged
这是代码IndexOf
:
它按预期抛出异常=)
更新
是的,我的猜测是正确的。这是 DataGrid 的代码ScrollIntoView
更新 问题已在此更新中修复
c# - 如何在 NotifyCollectionChangedEventArgs 中获取更改的项目?
我制作了一个 ObservableCollection<T> ,每次更改集合中对象的属性 (T: INPC) 时都会触发 CollectionChangedEvent。我想知道 T 的哪个属性触发了 CollectionChangedEvent,所以我尝试了以下方法:
我将 PropertyChangedEventArgs e 传递给 NotifyCollectionChangedEventArgs 的构造函数。
根据 Intellisense,第二个构造函数采用两个参数:一个 NotifyCollectionChangedAction 和一个名为“changedObject”的对象,该对象被描述为“受更改影响的项目”。
所以我认为我可以在 CollectionChangedEventHandler 中获取该对象并检查 PropertyName,但是哦!惊喜!NotifyCollectionChangedEventArgs 没有公开“ChangedObject”属性(我可以看到 Action、NewItems、OldItems、NewStartingIndex、OldStartingIndex)。
关于如何实现这一目标的任何想法?顺便说一句,用您以后无法访问的对象构造 NotifyCollectionChangedEventArgs 有什么用?
windows-8 - 在 WinRT 中,实现 INotifyCollectionChanged 不更新 ItemsControl 的集合
我正在编写自己的集合类,它也实现了 INotifyCollectionChanged。我在 Windows 8 商店应用程序 (winRT) 中使用它。我编写了一个单元测试,证明修改列表的内容会引发所有正确的事件,这些事件与“正常”可观察集合会引发的事件相同。尽管如此,当我将 ItemsControl 的 ItemsSource 属性(我尝试过 GridView、ListView 甚至普通的 ItemsControl)绑定到集合时,更改集合时它不会影响 UI。
底层集合类型是否必须是 ObservableCollection 才能工作,还是可以编写我自己的集合类?
谢谢
c# - 刷新计算属性的依赖树的最佳方法是什么?
我这里有一些课程或多或少地相互依赖。关系形式有点像依赖树:
因此,无论何时_bs
,_cs
或ValueOfC
发生变化,与它们相关的每个属性都应该被通知为也发生了变化,并因此被重新计算。
始终如一且可靠地实现这一目标的最佳方式是什么?有没有办法自动做到这一点?
mvvm - Observable Collection 在 MVVM 中的属性更改时通知
我正在尝试将可观察集合绑定到 DataGrid,我想在 datagrid 中编辑任何行时通知。我的代码适用于在添加或删除记录时发出通知,但在编辑记录时不会发出通知。请让我知道这是否是在 MVVM 中使用可观察集合进行绑定的正确方法,以及我是否缺少某些东西。提前致谢。
而 xaml 是
wpf - 带有集合的 wpf 附加属性未更新
我喜欢在应用程序和自定义用户控件之间共享一个列表。我使用 IEnumerable 作为附加属性来为自定义 UserControl 内的 Listbox 提供一个列表。ListBox 然后接收附加的属性作为 ItemsSource。到目前为止,这有效。但是当主机列表更改时,用户控件内的列表应该会更新。我怎样才能做到这一点?当前代码设置了 Usercontrol 列表,但是当宿主更改列表时,附加属性不会得到更新。
使用 UserControl 的主机有一个 ComboBox,它应该与 UserControl 的 ListBox 共享它的 ItemsSource
宿主的 Xaml 将 ComboBox 绑定到集合:
放置在主机内部的用户控件通过附加属性接收集合。绑定看起来很重,但似乎还可以:
附加属性有一个回调,目前只调用一次:
每当主机的 PersonList 更改时,都应调用 OnDynamicListPropertyChanged()。我是否必须将 INotifyCollectionChanged 放在附加属性中?如果是这样,在哪里以及如何?
data-binding - INotifyCollectionChanged 不足以更新数据绑定控件?
我正在尝试实现一个可绑定的集合 - 一个专门的堆栈 - 它需要显示在我的 Windows 8 应用程序的一个页面上,以及对它所做的任何更新。为此,我实现了 INotifyCollectionChanged 和 IEnumerable<>:
该集合类用于定义页面拥有的底层类实例的一个属性,设置为它的DataContext(页面的Calculator属性),然后绑定到一个GridView:
绑定最初在页面导航到时起作用 - 堆栈中的现有项目显示得很好,但是添加到堆栈中/从堆栈中删除的项目不会反映在 GridView 中,直到页面被导航离开和返回。调试显示 Stack 中的 CollectionChanged 事件始终为空,因此它永远不会在更新时被调用。
我错过了什么?
c# - UI 未绑定到 INotifyCollectionChanged
我有一些实现 INotifyCollectionChanged 的集合。
它用于 xaml
然后在 xaml.cs
收藏品显示得很好。但是 UI 在被触发时不订阅CollectionChanged
也不更新自身。CollectionChanged
也许我需要实现更多的接口来让 UI 控件订阅事件?
PS 我不能使用 ObservableCollection 因为编译器说这“不是 Windows 运行时接口”。
wpf - 针对 INotifyCollectionChanged 类型的数据绑定
我想要一个域模型集合类和一个视图模型类,它们只反映和投影域模型的元素——但它本身是只读的。
我的想法是这两种类型都实现了 INotifyCollectionChanged 接口,然后视图模型类型只是充当代理和投影仪,将模型元素包装在元素视图模型类型中。
问题是:实现 INotifyCollectionChanged 是否足以启用 WPF 数据绑定到例如 DataGrid 或 ListView 或者启用基于集合的数据绑定所需的最小接口集是什么?