MVVM - 静态ViewModel

时间:2015-06-17 11:28:38

标签: c# wpf mvvm

我使用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是静态类,因此它不能包含屏幕指定的数据)。

3 个答案:

答案 0 :(得分:0)

使用MultiBinding Converter(IMultiValueConverter.Convert)并向第二个参数传递每页所需行的跳过偏移值。跳过值可以传入/绑定到静态值或命名页面上可以提供该值的某些内容。

xml

答案 1 :(得分:0)

尝试将view-model设置为静态资源,然后将DataContext设置为{StaticResource VM}

答案 2 :(得分:0)

你可以保持你的ViewModel是静态的 - 意思是所有类变量,属性和方法 - 如果你想使用你的类作为Datacontext创建一个&#34; dumb&#34;实例并将该实例绑定到您的视图。 Datacontext本身必须是一个实例 - 但是当您的实例的(可绑定)属性是类拥有/静态时,它没有问题。

由您决定是按需创建实例还是遵循单例模式并仅创建一个实例(并使其在静态ClassProperty中可访问。

在最后一种情况下,Instance本身就是它自己的属性 - 小心!