Область запросов всплывающих окон и взаимодействий в призме - PullRequest
1 голос
/ 12 октября 2011

Мне нужно уточнить, когда использовать Pop-up, InteractionRequest.Вот мой сценарий.

У меня есть левый боковой вид, который отображает папку в древовидном формате (так же, как в каталоге Windows).Я должен позволить пользователю добавлять, переименовывать и удалять каталог с помощью контекстного меню.Для операций «Добавить и переименовать» должно появиться окно с «TextBox» для ввода данных пользователем и должны быть кнопки «Сохранить» и «Отмена».Для параметра «Удалить», если необходимо запросить подтверждение.

Что я должен сделать для операции добавления / переименования?

  1. Создать простое окно (с вводом текста пользователем TextBox, Сохранить и ОтменитьКнопка) без ViewModel.Нажатие кнопки «Сохранить и отменить» установит флаг DialogResult и закроет окно.

  2. Создание простого окна (с вводом пользователем TextBox, кнопки «Сохранить и отменить») с помощью ViewModel.Нажатие кнопки «Сохранить и отменить» будет обрабатываться во ViewModel (это выглядит утомительно, поскольку очень ограниченный код).

  3. Есть ли альтернативный способ справиться с этим?

Что мне делать для операции удаления?

  1. Я пойду на InteractionRequest

  2. Я пойду на Customized Window (диалог)который будет вызываться как MessageBox, без всплывающего окна или InteractionRequest (т.е. из модели представления => MyMessageBox.Show (.....) == Dialog.Ok ..

, пожалуйста, дайтемне правильное решение.

1 Ответ

2 голосов
/ 12 октября 2011

Поскольку ваш Popup такой маленький, я бы на самом деле создал DataTemplate внутри вашего текущего View и просто связал команды Add / Rename / Remove с той же моделью ViewModel.

Мне нравится использовать моего собственного всплывающего окна , потому что у меня было много проблем с всплывающими окнами WPF в прошлом. Обычно используется так:

<Grid Name="RootPanel">

    <DockPanel>
        <TreeView DockPanel.Dock="Right" />
        // <!-- Other Window Content -->
    </DockPanel>

    <local:PopupPanel
        local:PopupPanel.PopupParent="{Binding ElementName=RootPanel}"
        local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}"

        local:PopupPanel.BackgroundOpacity=".5"
        local:PopupPanel.PopupEnterKeyCommand="{Binding SaveCommand}"
        local:PopupPanel.PopupEscapeKeyCommand="{Binding CancelCommand}">

        // Put whatever you want for Popup Content here

        // Usually I have a property in my ViewModel for PopupContent, and 
        // will put a ContentControl here that uses a different ContentTemplate 
        // based on what type of object is in PopupContent
    </local:PopupPanel>

</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...