Silverlight,WPF和Windows Phone是否支持一些符合以下条件的集合:
IEnumerable<T>
作为来源答案 0 :(得分:0)
最通用的系列是ObservableCollection。您可以在构造函数中传递List。通过LINQ,您可以排序和过滤。您还可以使用CollectionViewSource在XAML中进行排序和过滤,但过滤是复杂的。并且各个项目需要实现iNotitifyPropertyChanged。我只知道WPF。
如果隐藏公共属性后面的过滤器,则可以强制重新评估它。可能会让你到达你需要的地方。
public partial class MainWindow : Window
{
ObservableCollection<person> Persons = new ObservableCollection<person>();
public MainWindow()
{
InitializeComponent();
Persons.Add(new person("jim", 12));
Persons.Add(new person("aa", 13));
Persons.Add(new person("ff", 14));
Persons.Add(new person("dd", 22));
Persons.Add(new person("hky", 23));
Persons.Add(new person("jsgdim", 24));
List<person> YoungPersons = Persons.Where(per => per.Age < 20).ToList();
Debug.WriteLine(Persons.Count.ToString());
Debug.WriteLine(YoungPersons.Count.ToString());
Debug.WriteLine(YoungPersonsProperty.Count.ToString());
Persons[0].Name = "Jimmy";
Debug.WriteLine(Persons[0].Name);
Debug.WriteLine(YoungPersons[0].Name);
Debug.WriteLine(YoungPersonsProperty[0].Name);
Persons.Remove(Persons[0]);
Debug.WriteLine(Persons.Count.ToString());
Debug.WriteLine(YoungPersons.Count.ToString());
Debug.WriteLine(YoungPersonsProperty.Count.ToString());
string testName;
DateTime startTime = DateTime.Now;
for (int i = 0; i < 1000000; i++)
{
testName = YoungPersonsProperty[0].Name;
}
DateTime endTime = DateTime.Now;
TimeSpan ts = endTime - startTime;
Debug.WriteLine(ts.Milliseconds.ToString());
}
public List<person> YoungPersonsProperty
{
get { return Persons.Where(per => per.Age < 20).ToList(); }
}
public class person : INotifyPropertyChanged
{
string name;
int age;
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public int Age { get { return age; } }
public string Name
{
get { return name; }
set
{
name = value;
NotifyPropertyChanged("Name");
}
}
public person (string Name, int Age)
{
name = Name;
age = Age;
}
}
}
我记得让LINQ过滤器动态应用而不会将它们隐藏在Property之后,但我不记得是怎么做的。
答案 1 :(得分:0)
你想要一个ObservableCollection。真的没别的了。
变体是您自己的实现IList的对象,但内部可以执行您想要的任何操作。为此,你要创建一个类似于
的类class MyClass: IList, INotifyPropertyChanged
{
//implement it
}
修改强> 还有CollectionViewSource object