2015-06-17 3 views
2

Я создал приложение с использованием шаблона MVVM. Во-первых, я создал взгляды пару (было показано только один), и все из них использует один ViewModel (который содержит некоторый список, который используется ListView и другими свойствами)MVVM - static ViewModel

<UserControl.DataContext> 
    <ViewModels:UniversalViewModel /> 
</UserControl.DataContext> 

Теперь мое приложение должно показать те же данные, но разделенных на несколько экранов. Я имею в виду, что я извлекаю, например, 12 строк данных на экран, я читаю из статического класса Config, у меня есть 2 экрана, поэтому основное окно по умолчанию открыто (оно содержит некоторое представление как содержимое) и другое внешнее окно также открыто (оно содержит одно и то же Просмотрите другой экземпляр). Кумулятивно я извлекаю 2 * 12 = 24 строки данных, и я хочу показать первые 12 строк на первом экране и последние 12 строк на втором экране (смещение).

Моя идея заключается в том, чтобы создать значение конвертер, который пропустит е строки данных и извлечение Y строк

ItemsSource="{Binding ArrivalDepartures, Converter={.....}}" 

, но как определить, сколько строк нужно быть пропущено (ViewModel является статическим классом, поэтому он не может содержать экран -специфические данные) преобразователем.

+2

Почему ваш вид моделирует статический класс? – BoltClock

+0

Поскольку каждый вид использует одни и те же данные, но только другие его части (например, первый экран показывает первые 12 строк, следующие следующие 12 строк и т. д.) Если у вас есть идея, я буду благодарен :) – Lukas

+1

Они не показывают одни и те же данные, правда? Почему бы не создать несколько экземпляров вашей модели представления - один с первыми 12 строками, один со следующими 12 строками? –

ответ

0

Используйте MultiBinding Converter (IMultiValueConverter.Convert) и передайте второй параметр значение смещения пропусков строк, необходимых на страницу. Значение пропуска может быть передано/привязано к статическому значению или что-то на названной странице, которое могло бы обеспечить это значение.

<MultiBinding Converter="{converters:SkipRecords}"> 
    <Binding ArrivalDepartures /> 
    <Binding ElementName=tbTotalRows Path="Index"/> 
</MultiBinding> 
0

Попробуйте установить показам модель как статический ресурс, а затем DataContext = {StaticResource VM}

0

Вы можете оставить свой ViewModel статический - то есть все классово-переменные, свойства и методы - если вы хотите использовать свой класс, поскольку Datacontext создает «немой» экземпляр и привязывает этот экземпляр к вашему представлению. Сам Datacontext должен быть экземпляром, но это не проблема, когда (привязываемые) свойства вашего экземпляра принадлежат классу/static.

Это до вас, вы создаете ли экземпляры по требованию или следовать одноплодной-шаблон и создать только один экземпляр (и сделать его доступным в статическом ClassProperty.

В последнем случае сам экземпляр является собственностью (

)