#c# #wpf #prism
#c# #wpf #prism
Вопрос:
Мне нужно разъяснение о том, когда использовать всплывающее окно, InteractionRequest. Вот мой сценарий.
У меня есть вид навигации слева, который отображает папки в формате дерева (так же, как и каталог Windows). Я должен разрешить пользователю добавлять, переименовывать и удалять каталог с помощью контекстного меню. Для операции добавления и переименования должно появиться окно с «текстовым полем» для ввода пользователем и должна быть кнопка «Сохранить» и «Отмена». Для опции удаления, если следует запросить подтверждение.
Что я должен сделать для операции добавления / переименования?
-
Создайте простое окно (с текстовым полем ввода пользователя, кнопкой сохранения и отмены) без ViewModel. Нажатие кнопки Сохранить и отменить установит флаг DialogResult и закроет окно.
-
Создайте простое окно (с текстовым полем ввода пользователя, кнопкой сохранения и отмены) с помощью ViewModel. Сохранение и отмена нажатия кнопки будут обрабатываться в ViewModel (это выглядит немного утомительно, поскольку очень ограниченный код).
-
Есть ли какой-либо альтернативный способ справиться с этим?
Что я должен сделать для удаления операции?
-
Я пойду на InteractionRequest
-
Я выберу настраиваемое окно (диалоговое окно), которое будет вызываться как MessageBox, без всплывающего окна или запроса взаимодействия (т. Е. Из view model => MyMessageBox.Показать (…..) == Диалог.Ок..
пожалуйста, дайте мне правильное решение.
Комментарии:
1. Я хочу, чтобы в этом вопросе была вся информация о запросе взаимодействия и всплывающем окне. Я потратил много времени на то, где использовать запрос взаимодействия и всплывающее окно, а где не следует.
2. Что ж, я проведу небольшое исследование и вскоре обновлю свой ответ.
Ответ №1:
Поскольку ваше всплывающее окно настолько мало, я бы на самом деле создал DataTemplate внутри вашего текущего представления и просто привязал команды добавления / переименования / удаления к той же 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>
Комментарии:
1. 1. Будет ли это работать для ввода пользователем текстового поля? 2. Почему не пользовательский MessageBox, такой как MyMessageBox. Показать (..) или IMessageBox. Показать (..), чтобы это позволило мне изменить стиль окна сообщения на лету.
2. @Mohanavel 1. Да. 2. Конечно, вы можете создать свой собственный пользовательский
MessageBox
.Show()
метод, но если вы хотите изменить содержимое диалогового окна, тогда мне проще просто использовать всплывающее окно3. Можете ли вы дать мне URL / пример сайта, который содержит ВСПЛЫВАЮЩЕЕ окно или запрос на взаимодействие с текстовым полем ввода пользователя? и я хочу, чтобы в этом вопросе была вся информация о запросе взаимодействия и всплывающем окне. Я потратил много времени на то, где использовать запрос взаимодействия и всплывающее окно, а где не следует.
4. @Mohanavel Я никогда не использую запрос на взаимодействие или встроенные всплывающие окна WPF, поэтому у меня нет сайтов об этих закладках. Вы должны быть в состоянии найти некоторые довольно легко с помощью Google.