本文的目的是介绍在单独的线程中更新ObservableCollection的详细情况,特别关注单线程操作上述更新过程,会不会有漏洞,为什么的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为
本文的目的是介绍在单独的线程中更新ObservableCollection的详细情况,特别关注单线程操作上述更新过程,会不会有漏洞,为什么的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在单独的线程中更新ObservableCollection的机会,同时也不会遗漏关于.net – Observable Collections Collection已更改、.net 中的 ObservableCollection 有什么用?、C# ObservableCollection两个字段排序的情况、C# ObservableCollection集合排序的知识。
本文目录一览:- 在单独的线程中更新ObservableCollection(单线程操作上述更新过程,会不会有漏洞,为什么)
- .net – Observable Collections Collection已更改
- .net 中的 ObservableCollection 有什么用?
- C# ObservableCollection两个字段排序的情况
- C# ObservableCollection集合排序
在单独的线程中更新ObservableCollection(单线程操作上述更新过程,会不会有漏洞,为什么)
在WPF应用程序中,LINQ将ObservableCollection填充并更新为SQL查询。然后,使用此ObservableCollection中的值更新UI对象。
通过LINQ将此ObservableCollection更新为SQL查询的操作是否在单独的线程中执行是否可能并且合理?
如果是,在这种情况下,它将是此ObservableCollection的一个实例吗?(我的意思是,如果从LINQ
datacontext获取值与提供值以更新UI的方式不同,那么我将无法更新UI)
答案1
小编典典使用内置ObservableCollection<T>
类,如果将UI绑定到集合,则不能从单独的线程更改内容,它会引发NotSupportedException
(但是,关于集合项属性的更改通知可以正常工作)。我编写了一个AsyncObservableCollection<T>
类来处理这种情况。它通过在UI同步上下文上调用事件处理程序来工作
.net – Observable Collections Collection已更改
ObservabelCollection<Person> personcollection... and if I change a property like: Person p = personcollection.where(e => e.FirstName == "Joey").FirstOrDefault(); if (p != null) { p.FirstName = "Joe"; }
我希望在UI中发生一些事情,但没有任何改变.
任何帮助将不胜感激.
大卫
解决方法
它并不关心它的集合中某个对象的属性是否发生变化.您需要在这些对象的属性上实现INotifyPropertyChanged接口以触发对UI的更改.
我读了here,给了我一些有用的见解.虽然它针对WPF,但大多数仍然适用,因为Silverlight本质上是WPF的一个子集.
以及这篇MSDN文章,其中指出:
In particular,if you are using OneWay or TwoWay (for example,you want your UI to update when the source properties change dynamically),you must implement a suitable property changed notification mechanism such as the INotifyPropertyChanged interface.
.net 中的 ObservableCollection 有什么用?
.net 中的 ObservableCollection 有什么用?
答案1
小编典典ObservableCollection 是一个集合,它允许集合外部的代码知道何时对集合进行更改(添加、移动、删除)。它在 WPF 和
Silverlight
中被大量使用,但它的使用不仅限于此。代码可以添加事件处理程序以查看集合何时发生更改,然后通过事件处理程序做出反应以进行一些额外的处理。这可能是更改 UI
或执行一些其他操作。
下面的代码实际上并没有做任何事情,而是演示了如何在类中附加处理程序,然后使用事件参数以某种方式对更改做出反应。WPF 已经有许多操作,例如刷新内置的
UI,因此您可以在使用 ObservableCollections 时免费获得它们
class Handler{ private ObservableCollection<string> collection; public Handler() { collection = new ObservableCollection<string>(); collection.CollectionChanged += HandleChange; } private void HandleChange(object sender, NotifyCollectionChangedEventArgs e) { foreach (var x in e.NewItems) { // do something } foreach (var y in e.OldItems) { //do something } if (e.Action == NotifyCollectionChangedAction.Move) { //do something } }}
C# ObservableCollection两个字段排序的情况
相对于System.Linq的OrderBy及OrderByDescending方法,调用后产生IOrderedEnumberable对象,这个对象为排序后的返回值,但原对象未发生变化。
试想,有这种需求,ObservableCollection调用排序方法后,此对象也跟着排序,怎么做呢?只能自己写个扩展方法了,方法内使用的冒泡排序算法,非常简单,当然使用是更简单、方便了。
注意:将方法写为扩展方法更方便:
class Student
{
int id;
string name;
}
ObservableCollection listDatas=new ObservableCollection<Student>();
listData .Add(new Student(){id=2,name="xiaoming"};
listData.Add(new Student(){id=1,name="李华"};
listData.Add(new Student(){id=3,name="张度"};
listDatas.OrderBy(cu=>cu.id,true);//按ID升序排序
listDatas.OrderBy(cu=>cu.id,false);//按ID降序排序
listDatas.OrderBy(cu=>cu.name,false);//按名称升序排序
listDatas..ThenBy(x => x.name)//按名称升序排序 (只有ID相同的情况下,按name升序排序)
C# ObservableCollection集合排序
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BYH371256/article/details/83346807
注意:ObservableCollection集合 直接使用OrderBy 等函数排序,有问题的,排序不改变,可以转成List在进行排序
命名空间:System.Collections.ObjectModle
在WPF中,绑定列表List,数据更新后不会通知界面更新,要使用ObservableCollection集合,当数据发生改变就通知界面改变;
解决方法一:List列表转为ObservableCollection集合
private ObservableCollection<BaseSignalViewModel> children = new ObservableCollection<BaseSignalViewModel>();
public ObservableCollection<BaseSignalViewModel> Children
{
get { return children; }
set
{
children = value;
NotifyOfPropertyChange(() => Children);
}
}
List<BaseSignalViewModel> listChild = CurrentSignal.Children.ToList();
listChild.Sort(delegate(BaseSignalViewModel p1, BaseSignalViewModel p2) { return Comparer<string>.Default.Compare(p1.Index.ToString(), p2.Index.ToString()); });
//List列表转为ObservableCollection集合
CurrentSignal.Children = new ObservableCollection<BaseSignalViewModel>(listChild);
---------------------
作者:Kaivin.bao
来源:CSDN
原文:https://blog.csdn.net/byh371256/article/details/83346807
版权声明:本文为博主原创文章,转载请附上博文链接!
今天关于在单独的线程中更新ObservableCollection和单线程操作上述更新过程,会不会有漏洞,为什么的讲解已经结束,谢谢您的阅读,如果想了解更多关于.net – Observable Collections Collection已更改、.net 中的 ObservableCollection 有什么用?、C# ObservableCollection两个字段排序的情况、C# ObservableCollection集合排序的相关知识,请在本站搜索。
本文标签: