Разработка простого диалога сохранения в Prism - PullRequest
0 голосов
/ 28 января 2010

Я пишу приложение, используя платформу Microsoft Prism, и у меня возникают проблемы при разработке наилучшего подхода к простому диалоговому окну «Сохранить файл» style .
Примечание: я не могу использовать стандартный диалог, так как я не сохраняю файлы в файловую систему, поэтому нужно написать что-то похожее с нуля.

Итак, вот основные элементы управления моего диалога:

  • Пользовательский элемент управления, отображающий иерархию папок. (IFolderView)
  • Представление списка для отображения содержимого папки. (IFolderContentsView)
  • Текстовое поле для ввода пользователем имени сохраненных файлов.

Единственное реальное взаимодействие в форме заключается в том, что когда пользователь выбирает папку слева, представление списка справа заполняется содержимым папок.

Когда я начал писать диалог, я изначально создал пару регионов для своих пользовательских элементов управления и использовал обнаружение видов для добавления своих видов. Я сделал это, потому что это то, как я вводил IFolderView в другом месте приложения. Теперь я обнаружил, что мне нужно что-то узнать об элементах управления в регионе, чтобы они могли взаимодействовать друг с другом. Я думал о EventAggregator, но это не подходит для простого диалога сохранения.

Мое решение этой проблемы - использовать представление инъекций. Поэтому я спрашиваю мой контейнер Unity о реализации IFolderViewModel и устанавливаю его вид содержимого региона во время инициализации. Таким образом, я знаю достаточно о пользовательских элементах управления в форме, чтобы она работала, но все равно она слабо связана.

Похоже ли это на разумную вещь? Есть ли способ лучше? Я что-то упустил?

1 Ответ

1 голос
/ 28 января 2010

В большинстве случаев в Prism люди используют ISystemInteraction (что-то вроде ISystemCommands или подобное) для вызова диалогов или взаимодействия с файловой системой. Таким образом, он остается тестируемым, но ViewModel не несет ответственности за то, чтобы делать что-то специфичное для представления. Вот пример интерфейса:

public interface ISystemCommands
{
     //Raises a save file dialog with a prepopulated name
     void SaveFile(string name, byte[] content);
}

Тогда вы предоставите реализацию, которая будет доступна из командной консоли, которая будет взаимодействовать с файловой системой. Это и MVVM, и тестируемый (который мне нравится).

Здесь есть связанный вопрос, который в основном дает тот же ответ: Диалог открытия файла MVVM

...