ViewModel可以具有IEnumerable类型的属性<>而不是数组

时间:2013-05-15 13:49:10

标签: c# properties viewmodel ienumerable lazy-evaluation

我通常像这样构建我的ViewModel

MyViewModel {
  (...)
  IEnumerable<MyClass> Items {get; set;}
}

我是否应该关心(害怕)我没有传递已经评估过的值,如下面的代码所示?

MyViewModel {
  MyClass[] Items {get; set;}
}

有时懒惰评估会导致一些问题。

4 个答案:

答案 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