Tag: observablecollection

有没有办法将可观察的集合转换为常规集合?

我有一个测试集合设置为: ObservableCollection MyselectedPeople = new ObservableCollection(); public MainWindow() { InitializeComponent(); FillData(); } public void FillData() { Person p1 = new Person(); p1.NameFirst = “John”; p1.NameLast = “Doe”; p1.Address = “123 Main Street”; p1.City = “Wilmington”; p1.DOBTimeStamp = DateTime.Parse(“04/12/1968”).Date; p1.EyeColor = “Blue”; p1.Height = “601”; p1.HairColor = “BRN”; MyselectedPeople.Add(p1); } 一旦我构建了这个集合,我希望能够将Observable Collection转换为List类型。 这背后的原因是我的主要项目是接收带有数据的通用列表,我必须将其转换为Observable集合,以便在gridview,列表框等中使用。在UI中选择数据,然后将其发送回原始程序集以供进一步使用。

使用BindingOperations.EnableCollectionSynchronization

我有两个WPF应用程序“UI”,“调试器”和一个ClassLibrary“BL”。 UI对Debugger和BL的引用。 调试器引用BL。 我在BL中收集了名为MyCollection的集合。 UI应用程序启动调试器应用程序,调试器绑定到BL中的集合MyCollection。 当我尝试从UI应用程序更改MyCollection集合时,我遇到exception。 A first chance exception of type ‘System.NotSupportedException’ occurred in PresentationFramework.dll Additional information: This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread. 我在google搜索并发现: BindingOperations.EnableCollectionSynchronization我无法弄清楚如何使用它。 我不想引用我的BL项目中的任何UI dll。 任何人都能协助我吗? 谢谢您的帮助!

ObservableCollection数据绑定性能

我想知道为什么根据这篇文章和可观察集合比WPF中的List 集合明显更快地绑定(20毫秒vs 1685毫秒,这比800倍快)。 我查看了ObservableCollection的内部,它使用List作为它的存储集合对象(我使用了反射器并在构造函数中看到了这个) public Collection() { this.items = new List(); } 那么这里发生了什么?

在IEnumerable上使用Observable Collection的优点和缺点

我试图决定是否要将所有IEnumerable集合切换到Observable Collections。 我找不到对此的好解释。 可理解的术语中Observable Collection的优点和缺点是什么?

可观察的集合属性已更改为集合中的项目

我有一个ObservableCollection 。 我已将它绑定到ListBox控件,我已将SortDescriptions到ListBox上的Items集合中,以使列表按我的方式排序。 当在子元素上更改任何属性时,我想在任何时候使用列表。 我的所有子元素都实现了INotifyPropertyChanged 。

异步添加到ObservableCollection(或替代)

这就是我所拥有的 – 一个ListBox,其ItemsSource设置为ObservableCollection – 其中T是我的自定义类,表示一个文件,只包含2个DependencyProperties:Filename和ThumbnailPath。 – 列表框还定义了自定义DataTemplate,以便在其下很好地显示图像和文件名。 列表框的目的是显示当前文件夹中的video文件(在TreeView中选择),缩略图(异步生成;不是此问题的一部分)。 因此,当我更改TreeView中的文件夹时,ObservableCollection将被清除并再次填充,这将自动反映在ListBox项目中。 问题在于:UI变得无法响应,更新需要几秒钟。 同样,缩略图在这里没有意义(我尝试禁用它们)。 我认为花费最多时间的是构建我自定义类的50-100个实例及其可视化表示 – 它必须为每个实例初始化一个Image对象。 但这只是我的猜测 – 你能否确认或排除这种可能性? 我开始认为ObservableCollection可能不是这里的方式 ,因为根据我的阅读和我尝试的内容,没有办法异步添加项目,至少如果这些项目是DependencyObjects。 我尝试使用BackgroundWorker创建我的类实例,并将它们添加到ProgressChanged事件处理程序中的集合中,但它会抛出exception(某些线程与dependencyobjects问题)。 有什么东西我不见了吗? 或者通过简单地抛弃ObservableCollection并编写一个好的旧异步for循环来添加项目,我会更好吗?

将对象的Observable collectin保存到XML文件的最简单方法是什么?

我有一个包含客户对象的Observable集合: public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string Street { get; set; } public string Location { get; set; } public string ZipCode { get; set; } } 将此转储到XML文件的最简单方法是什么,以便稍后阅读?

将可观察集合绑定到XAML中的ListBox

我花了很多时间来解决这个问题。 我有一个数据类: public class User : INotifyPropertyChanged { private int _key; private string _fullName; private string _nick; public int Key { get{return _key;} set { _key = value; NotifyPropertyChanged(“Key”); } } public string Nick { get { return _nick; } set { _nick = value; NotifyPropertyChanged(“Nick”); } } public string FullName { get { return […]

有效地向ObservableCollection添加一系列值

我有一个ObservableCollection项目绑定到我的视图中的列表控件。 我有一种情况,我需要在集合的开头添加一大块值。 Collection.Insert文档将每个插入指定为O(n)操作,每个插入也生成一个CollectionChanged通知。 因此,我希望在一次移动中插入整个范围的项目,这意味着只有一个基础列表的随机播放,并且希望有一个CollectionChanged通知(可能是“重置”)。 Collection不会公开任何执行此操作的方法。 List具有InsertRange() ,但是IList , Collection通过其Items属性公开不会。 有没有办法做到这一点?

DataTable到可观察的集合

我一直在谷歌搜索并在这里搜索答案,但我仍然无法理解一个非常基本的东西 – 如何将DataTable转换为Observable Collection? 这是我得到了多远: public ObservableCollection test; public class Test { public int id_test { get; set; } public string name { get; set; } } 主要.. DataTable TestTable = new DataTable(); TestTable.Columns.Add(new DataColumn(“id_test”, typeof(int))); TestTable.Columns.Add(new DataColumn(“name”, typeof(string))); DS.Tables.Add(TestTable); var test = new ObservableCollection(); foreach(DataRow row in test_table.Rows) { var obj = new Test() […]