2010-04-17 40 views
2

我刚开始学习MVVM,并有一个困境。MVVM良好的设计。 DataSet或RowViewModel

如果我有一个主ViewModel,并且在这个模型中我有一些数据集。现在我应该为数据集中的每一行创建一个新的ViewModel?或者将DataSet本身暴露为DependencyProperty?

对于现在的数据集在其内部具有约20行,并通过各行迭代创建一个视图模型绑定到每个行的思想....可能不适合性能原因和内存的最佳选择未来的原因,比如有2000多行。

我还应该继续创建一个RowViewModel并遍历数据集来创建一个新的RowViewModel吗?并有一个RowViewModels的ObservableCollection或只是公开DataSet?

此DataSet/ViewModel的绑定将是一个组合框,因此为什么只加载可见行可能会导致性能问题,因为用户希望能够无任何延迟地进行滚动。

任何帮助将不胜感激。

回答

2

如果你有一个复杂的组合框,其中每一行都有一个ID,名称,图片(可能涉及一些逻辑)等等,并且你有一个表示每一行的视图,那么你需要创建rowViewModel因为您必须测试该代码(TDD!)。

对于简单的组合框,您只需要在每行显示一个字符串,绑定字符串列表或数据集就更好了。

正如彼得所说,小心使用可以长得这么大的组合框。您的用户不会喜欢它:)

此外,由于您担心性能,请考虑使用DataReader填充字符串列表,而不是加载大型数据集。

干杯,

安德烈

+0

感谢DataReader技巧,我会研究它:) – 2010-04-19 08:06:39

+0

+1为datareader提示。是在视图模型问题中被挂起来的,我忘记了对大数据集的质疑:) – 2010-04-19 08:36:09

1

imo的一个重要问题是:您是否需要一次显示所有这些记录,或者您是否有某种分页/导航机制?

如果您要在同一视图中显示所有行,则为每行创建RowViewModels显然会增加开销。您可以通过让视图模型引用基础行而不是复制行数据来缓解部分开销。

虽然我会研究构建某种页面导航,因为滚动浏览所有数据可能不是最好的用户体验。如果您坚持20的页面大小,那么您一次只需要20个视图模型。

+0

诚然,我想用户将无法看到整个1000项。这不会是最好的主意。 – 2010-04-18 00:15:29