[英]Is this the best way to convert List<T> from models to ObservableCollection<T> in views?
In MVVM development I am constantly converting List<T>
from my models to ObservableCollection<T>
for my views . 在MVVM开发中,我不断将
List<T>
从我的模型转换为ObservableCollection<T>
以获取我的视图 。
I looked around in .NET for a way to succinctly do this eg such as .ToList<>
or .ToArray<>
or .ToDictionary<>
but couldn't find anything similar for ObservableCollection . 我在.NET中查找了一种简洁的方法,例如
.ToList<>
或.ToArray<>
或.ToDictionary<>
但是找不到任何与ObservableCollection类似的东西。
Therefore I made the following extention method ConvertToObservableCollection<T>()
. 因此我做了以下扩展方法
ConvertToObservableCollection<T>()
。
Is there a better way to convert List<T>
to ObservableCollection<T>
, or does every MVVM developer end up writing this extension method at some point? 有没有更好的方法将
List<T>
转换为ObservableCollection<T>
,或者每个MVVM开发人员最终都会在某个时候编写此扩展方法?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Documents;
using System.Collections.ObjectModel;
namespace TestObser228342
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List<string> names = new List<string> { "one", "two", "three" };
ObservableCollection<string> ocNames =
names.ConvertToObservableCollection<string>();
ocNames.ToList().ForEach(n => Console.WriteLine(n));
List<Customer> customers = new List<Customer>
{
new Customer { FirstName = "Jim", LastName = "Smith" },
new Customer { FirstName = "Jack", LastName = "Adams" },
new Customer { FirstName = "Collin", LastName = "Rollins" }
};
ObservableCollection<Customer> ocCustomers =
customers.ConvertToObservableCollection<Customer>();
ocCustomers.ToList().ForEach(c => Console.WriteLine(c));
}
}
public static class StringHelpers
{
public static ObservableCollection<T> ConvertToObservableCollection<T>
(this List<T> items)
{
ObservableCollection<T> oc = new ObservableCollection<T>();
foreach (var item in items)
{
oc.Add(item);
}
return oc;
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return FirstName + " " + LastName;
}
}
}
Why don't you use the appropriate constructor of ObservableCollection
? 为什么不使用
ObservableCollection
的相应构造函数?
ObservableCollection<Customer> ocCustomers =
new ObservableCollection<Customer>(customers);
使用ObservableCollection构造函数声明变量也适用于Silverlight 4。
your solution seems way to complicated...maybe mine is too simple..this is an extension method I wrote to convert my nettiers collections to observable collections...its in vb.net... but you'll get the gist... 你的解决方案似乎很复杂...也许我的太简单了......这是我写的一个扩展方法,用于将我的nettiers集合转换为可观察的集合......它在vb.net中...但你会得到要点。 ..
<System.Runtime.CompilerServices.Extension()> _
Public Function [ToObservableCollection](Of T)(ByVal list As IEnumerable(Of T)) As ObservableCollection(Of T)
Dim collection As New ObservableCollection(Of T)
For Each l As T In list
collection.Add(l)
Next
Return collection
End Function
here is the converted C# 这是转换后的C#
[System.Runtime.CompilerServices.Extension()]
public ObservableCollection<T> ToObservableCollection<T>(IEnumerable<T> list)
{
ObservableCollection<T> collection = new ObservableCollection<T>();
foreach (T l in list) {
collection.Add(l);
}
return collection;
}
I suppose to you could use a lambda, but I dont understand them, so I avoid them. 我想你可以使用lambda,但我不理解它们,所以我避免使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.