问题标签 [observablecollection]

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 投票
1 回答
404 浏览

wpf - 修改 ObservableCollection在运行时声明为资源

我有一堆从数据库填充的 ObservableCollections。很有可能在应用程序的生命周期中这些集合会增长,我需要它们每 30 秒左右更新一次。

我将集合声明为 App.xaml 中合并字典中的资源。我可以使用 Application.FindResource() 方法很好地获取这些集合,但是当我再次调用 FindResource 时,我对结果集合所做的任何更改都不会反映出来。也许我天真地认为会是这样。

我是对还是错?

0 投票
1 回答
1265 浏览

wpf - WPF 绑定到 ObjectDataProvider 方法并检测返回值依赖关系

我正在使用 ObjectDataProvider 绑定到一个方法。公开此方法的类包含 T:INofifyChanged 类型的 ObservableCollection。我的问题是,因为方法返回值取决于它的 ObservableCollection 的值,所以我需要在 ObservableCollection 以任何方式更改时更新绑定。

简而言之,该方法的返回值取决于其他因素,我希望此方法绑定在它的依赖关系发生变化时刷新。

我如何让绑定控件知道方法返回值何时不同?

0 投票
1 回答
522 浏览

wpf - WPF数据绑定,替换源对象

我有一些 UI 绑定到 T 类型的 ObservableCollection,其中“T”实现了 INotifyProperty 已正确更改。

问题是我需要在运行时完全换掉 ObservableCollection,因为它是从 SQL 调用中填充的。这显然会弄乱整个绑定,并且不会触发任何更改通知。

如何在运行时替换源对象而不丢失绑定?

代码大致是这样的

0 投票
2 回答
3174 浏览

wpf - INotifyPropertyChanged 不适用于 ObservableCollection 属性

我有一个名为IssuesViewwhich implements的类INotifyPropertyChanged。此类拥有一个ObservableCollection<Issue>并将其公开为一个DependencyProperty名为的问题以供Bindings. 它定义如下 -

我有一个这样声明的测试页-

IssuesView定义在Application.Resources.
现在在按钮的事件 hadnler 我有这个代码 -

once 是一个简单的布尔值,用于测试集合的突变与重新填充。

第一次单击按钮会更改集合的项,并且 UI 会正确更新,因为这些项实现了 INotifyPropertyChanged,但第二次单击会重新填充集合,但不会更新 UI,即使事件不为 null 并且正确触发也是如此。

为什么第二次点击时 UI 不更新?我怎样才能使它重新填充集合将导致 UI 更新?

0 投票
13 回答
121747 浏览

c# - ObservableCollection 不支持 AddRange 方法,所以我会收到添加的每个项目的通知,除了 INotifyCollectionChanging 呢?

我希望能够添加一个范围并为整个批量更新。

我还希望能够在操作完成之前取消操作(即除了“更改”之外的集合更改)。


相关 Q 哪个 .Net 集合可以一次添加多个对象并获得通知?

0 投票
2 回答
11128 浏览

c# - 合并的 ObservableCollection

我有两个 ObservableCollections,我需要将它们一起显示在一个 ListView 控件中。为此,我创建了 MergedCollection,它将这两个集合呈现为一个 ObservableCollection。这样,我可以将 ListView.ItemsSource 设置为我的合并集合,并列出两个集合。添加工作正常,但是当我尝试删除项目时,会显示未处理的异常:

MergedCollection 的代码如下:

问候

0 投票
3 回答
12478 浏览

c# - 如何更新 ObservableCollection 的现有元素?

我有一个绑定到 WPF 列表框的 ObservableCollection 实例,该列表框具有两个单独的数据模板(一个用于显示,一个用于编辑)。用于编辑的数据模板在文本框上有一个单向绑定和一个保存按钮。

我需要进行哪些更改,以便当我按下保存按钮时(将列表项置于编辑模式后),我更改文本框的值以替换 ObservableCollection(和显示)中的值?

0 投票
1 回答
275 浏览

c# - 在 ObservableCollection 中识别和替换对象的最有效方法是什么?

我有一个方法可以接收已更改属性的客户对象,我想通过替换该对象的旧版本将其保存回主数据存储中。

有谁知道在下面编写伪代码的正确 C# 方法?

0 投票
2 回答
3265 浏览

c# - 为什么 ObservableCollection 隐藏 INotifyPropertyChanged.PropertyChanged

我有一个派生自 ObservableCollection 的类。我想向这个类添加一些属性(不是集合中的项目),但发现它的 PropertyChanged 实现是受保护的。由于它受到保护,我认为这就是我在 XAML 中绑定到这些新属性的尝试失败的原因。

如果没有创建一个挂起这个实现 INotifyPropertyChanged 并容纳这些新属性的类的对象,有没有一种我忽略的方法?

0 投票
3 回答
4508 浏览

c# - ObservableCollection 和 ListBoxItem DataTemplate 生成问题

ObservableCollection 发生了一些奇怪的事情。

我有以下代码:

我在这里要做的是控制有多少项目进入 ObservableCollection _display。现在,在这个 for 循环中,您可以看到元素被添加,直到总元素高度(+偏移)大于列表框本身。

现在,这很奇怪,在这个 for 循环之后 elementsHeight 等于 0。(即使 lbi 不为空,CalculateItemsHeight 在所有循环迭代中都返回 0)似乎未创建数据模板中定义的 UI 元素......

然而。

现在,如果我在 _display.Add(verse) 之后放置一些 MessageBoxes,您可以看到 CalculateItemsHeight 实际上返回项目的高度。

如图所示修改 for 循环后,最后一个 MessageBox实际上显示了所有已处理元素的实际高度。

我的问题是 - UI 元素是什么时候真正创建的?似乎它是在 MessageBox 显示期间的某个地方完成的。这种行为对我来说很奇怪,也许它与线程有关,不确定。

添加到 _display ObservableCollection 显然会立即创建一个项目,而不是它的视觉元素(但是它们是在之后添加的,我只是不知道确切的时间)。如何在不必弹出消息框的情况下执行相同的行为?