ViewModel可以有IEnumerable<>而不是Array
本文关键字:Array IEnumerable ViewModel | 更新日期: 2023-09-27 18:13:36
我通常这样构建我的ViewModel
:
MyViewModel {
(...)
IEnumerable<MyClass> Items {get; set;}
}
我应该关心(害怕),我没有传递一个已经计算值像下面的代码?
MyViewModel {
MyClass[] Items {get; set;}
}
有时懒惰求值会导致一些问题
只要确保在视图模型构造函数中创建IEnumerable的具体实例,就不会有任何问题。
我是否应该关心(害怕)我没有传递已经计算过的值,就像下面的代码一样?
不,因为你没有将它们传递到任何地方。更清楚地说,在View
中求值的代码是在服务器端求值并运行的,因此在这里使用IEnumerable
没有任何问题。你可以在视图中管理这些问题,就像在其他地方一样。事实上,如果它是一个非常大的列表,它可能会更有效!
我应该担心(害怕)我没有通过已经评估过的考试吗值像下面的代码?
至少,您应该记住,枚举数可以是无限的:
public class MyViewModel
{
public IEnumerable<int> Numbers
{
get
{
while (true)
{
yield return 0;
}
}
}
}
但是,这并不是拒绝惰性枚举属性的理由。
如果可以选择,永远不要绑定IEnumerable。
将IList绑定到ItemsControl not IEnumerable如果您真的关心性能