1

我一般ViewModel是这样构建的:

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

我是否应该关心(害怕)我没有像下面的代码那样传递已经评估过的值?

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

有时惰性求值会导致一些问题。

4

4 回答 4

2

只需确保在视图模型构造函数中新建 IEnumerable 的具体实例,就不会出现任何问题。该列表将是空的。

于 2013-05-15T13:51:43.470 回答
1

我是否应该关心(害怕)我没有像下面的代码那样传递已经评估的值?

不,因为你没有在任何地方传递它们。更清楚地说,在 中评估的代码View是在服务器端评估并运行的,所以在IEnumerable这里使用没有错。您可以像在其他任何地方一样管理视图中的任何这些问题。事实上,如果它是一个非常大的列表,它可能会更有效!

于 2013-05-15T13:51:07.267 回答
1

我是否应该关心(害怕)我没有像下面的代码那样传递已经评估的值?

至少,您应该记住,枚举器可以是无穷无尽的:

public class MyViewModel
{
    public IEnumerable<int> Numbers
    {
        get
        {
            while (true)
            {
                yield return 0;
            }
        }
    }
}

但是,确实,这不是拒绝惰性枚举属性的理由。这只是一个需要更加小心的理由。

于 2013-05-15T13:55:10.960 回答
0

如果你有选择,永远不要绑定到 IEnumerable。

将IList绑定到ItemsControl而不是IEnumerable如果您真的关心性能,请在此处 阅读更多信息

于 2014-03-03T13:35:47.320 回答