我通常像这样构建我的ViewModel
:
MyViewModel {
(...)
IEnumerable<MyClass> Items {get; set;}
}
我是否应该关心(害怕)我没有传递已经评估过的值,如下面的代码所示?
MyViewModel {
MyClass[] Items {get; set;}
}
有时懒惰评估会导致一些问题。
答案 0 :(得分:2)
只需确保在View Model Constructor中新建IEnumerable的具体实例,就不会有任何问题。该列表将是空的。
答案 1 :(得分:1)
我是否应该关心(害怕)我没有像下面的代码那样传递已经评估过的值?
不,因为你不是将它们传递到任何地方。为了更清楚,评估View
中的代码并在服务器端运行,因此在此使用IEnumerable
没有任何问题。您可以在视图中管理任何这些问题,就像您在其他任何地方一样。事实上,如果它是一个非常大的列表,它可能会更有效!
答案 2 :(得分:1)
我是否应该关心(害怕)我没有通过已经评估的价值 像下面的代码中的值?
至少,您应该记住,枚举器可以是无穷无尽的:
public class MyViewModel
{
public IEnumerable<int> Numbers
{
get
{
while (true)
{
yield return 0;
}
}
}
}
但是,确实,它不是拒绝惰性枚举属性的原因。这只是更加小心的一个原因。
答案 3 :(得分:0)
如果你有选择,永远不要绑定到IEnumerable。
将 IList 绑定到 ItemsControl 而非 IEnumerable 如果您真的关心性能,请阅读更多here