2013-10-11 2 views
0

Я пишу довольно большое приложение WPF, которое следует за структурой MVVM. Я хотел бы запустить свой интерфейс в основном в двух режимах. Первый - обычный рабочий день. Второй - это тот, о котором мне было интересно некоторое время ... Я хотел бы иметь возможность запускать его в режиме «настройки», когда пользователь будет видеть интерфейс более или менее таким же образом, как обычный , за исключением того, что всплывающее окно появляется, когда они навешивают (или могут щелкнуть) элемент управления. Это всплывающее окно позволит пользователю изменять определенные привязки, связанные с этим элементом управления. Я не хочу раскрывать каждое свойство (или каждый элемент управления).WPF MVVM: привязки к развязке и динамические настройки привязок

Например: Существует текстовый блок, который имеет привязку к сигналу давления, теперь, когда пользователь хочет изменить эту привязку к сигналу температуры. Они могут запускать пользовательский интерфейс в режиме конфигурации, перейти к экрану с помощью TextBlock, выбрать его и просмотреть свойство «Текст» во всплывающем окне, которое затем они могут изменить на новый временный сигнал. Это упрощенный экзамен, но в основном то, что я ищу.

Возможно ли это? Помните, что пользовательский интерфейс должен был бы записываться в представление (XAML). Любая помощь приветствуется.

P.S. Это была бы очень полезная, но редко используемая функция. Было бы хорошо, если бы у вас было 2 проекта, которые устанавливают один и тот же вид, но разные ViewModels и Models ... по крайней мере, это то, о чем я думал, может понадобиться. Даже если пользовательский интерфейс обычного режима должен быть перекомпилирован после использования пользовательского интерфейса режима конфигурации.

+0

Обращайтесь с этим на уровне ViewModel, вместо того чтобы пытаться взломать интерфейс для этого. Вам нужно абстрагировать свои представления и создать модельное представление этих «виджетов». Пользовательский интерфейс не может сохраняться (например, в базе данных). Поэтому вам нужно что-то еще. –

+0

Вы говорите, что хотите изменить привязку, чтобы она была постоянно привязана к чему-то еще? – Daniel

+0

В противном случае ваши файлы XAML будут развернуты вместе с приложением (вместо компиляции) и загрузите их во время выполнения с помощью 'XamlReader.Load()' или что-то еще, затем вы можете изменить файлы XAML (на диске). –

ответ

0

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

Храните привязки как пользовательские настройки и при поступлении сообщения из всплывающего окна виртуальной машины, неся новым связывание в качестве полезной нагрузки, основной VM бы получить эту полезную нагрузку и сохранить соответствующие настройки пользователя, просто позвонив Settings.Default.Save();

Based по вашему описанию, нет никаких причин, чтобы сделать его более сложным, чем это IMO ...

Смежные вопросы