C# MVVM很好的设计。数据集或RowViewModel

C# MVVM很好的设计。数据集或RowViewModel,c#,mvvm,viewmodel,C#,Mvvm,Viewmodel,我刚刚开始学习MVVM,并开始学习dilemna 如果我有一个主视图模型,并且在这个模型中,我有许多数据集。现在我应该为数据集中的每一行创建一个新的ViewModel吗?或者将数据集本身作为DependencyProperty公开 目前,数据集中大约有20行,我们考虑遍历每一行以创建与每一行绑定的ViewModel。。。。对于性能原因和内存原因,可能不是未来的最佳选择,例如当有2000多行时 我是否仍应继续创建RowViewModel并遍历数据集创建新的RowViewModel?然后进行RowV

我刚刚开始学习MVVM,并开始学习dilemna

如果我有一个主视图模型,并且在这个模型中,我有许多数据集。现在我应该为数据集中的每一行创建一个新的ViewModel吗?或者将数据集本身作为DependencyProperty公开

目前,数据集中大约有20行,我们考虑遍历每一行以创建与每一行绑定的ViewModel。。。。对于性能原因和内存原因,可能不是未来的最佳选择,例如当有2000多行时

我是否仍应继续创建RowViewModel并遍历数据集创建新的RowViewModel?然后进行RowViewModels的ObservableCollection,还是只公开数据集

此DataSet/ViewModel的绑定将是一个组合框,因此,由于用户希望能够在没有任何延迟的情况下滚动,因此仅加载可查看的行可能会带来性能问题


如果有任何帮助,我们将不胜感激。

国际海事组织提出的一个重要问题是:您是否需要立即显示所有这些记录,或者是否需要某种分页/导航机制

如果要在同一视图中显示所有行,为每行创建RowViewModels显然会增加开销。通过让viewmodels引用底层行而不是复制行数据,可以减轻一些开销


不过,我会考虑构建某种页面导航,因为滚动浏览所有这些数据可能不是最好的用户体验。如果您坚持页面大小为20,那么您在任何时候都只需要20个viewmodels。

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

对于只希望每行显示一个字符串的简单组合框,绑定字符串列表或数据集就足够了

正如Peter所说,要小心一个组合框,它可能会变得如此之大。你的用户不会喜欢它的:)

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

干杯


安德烈

没错,我猜用户将无法看到全部1000个项目。这不是最好的主意。谢谢你的DataReader提示,我会仔细研究:)+1的DataReader提示。在viewmodel问题上太纠结了,以至于我忘了询问庞大的数据集:)