【发布时间】:2015-06-17 11:28:37
【问题描述】:
我使用 MVVM 模式创建了一些应用程序。首先,我创建了几个视图(只显示了一个),它们都使用一个 ViewModel(其中包含一些 ListView 和其他属性使用的 List)
<UserControl.DataContext>
<ViewModels:UniversalViewModel />
</UserControl.DataContext>
现在我的应用程序需要显示相同的数据,但分成几个屏幕。我的意思是我每个屏幕检索例如 12 行数据,我从静态 Config 类中读取我有 2 个屏幕,因此默认主窗口打开(它包含一些作为内容的视图)并且其他外部窗口也打开(它包含相同仅查看另一个实例)。累积我检索 2*12=24 行数据,我想在第一个屏幕上显示前 12 行,在第二个屏幕上显示最后 12 行(偏移量)。
我的想法是创建值转换器,它将跳过 x 行数据并检索 y 行
ItemsSource="{Binding ArrivalDepartures, Converter={.....}}"
但是如何确定转换器需要跳过多少行(ViewModel 是静态类,因此它不能包含屏幕指定的数据)。
【问题讨论】:
-
为什么你的视图模型是静态类?
-
因为每个视图都使用相同的数据,但只使用它的其他部分(例如,第一个屏幕显示前 12 行,下一个屏幕显示接下来的 12 行等)。如果您有更好的主意,我将不胜感激:)
-
他们没有显示相同的数据,是吗?为什么不创建视图模型的多个实例 - 一个包含前 12 行,一个包含接下来的 12 行?
-
@BoltClock 您可能无法将其分配为dataContext,但您可以通过
{x:Static ...}在任何上下文中访问静态类 -
@Lukas 使用适当的 IoC 并在其中注册一个单例实例会更好。否则,您无法通过自动连接模拟实例和属性来测试您的配置。实际上,您正在做的事情限制了所有测试的可能性,并且是一个很大的反模式。