Шоу окна Error, модальное в MVVM WPF

Replace В походит на опцию. Или можно свериться

IF NOT EXISTS(QUERY) Then INSERT

, Это вставит или удалит, затем вставляют. Я склонен идти для IF NOT EXISTS проверка сначала.

7
задан bluebit 24 August 2009 в 09:28
поделиться

5 ответов

Разделение View / ViewModel предназначено для разделения внешнего вида и функциональности. Я твердо верю, что Window - это функциональность и внешний вид в одном лице. Например, что, если в вашей ErrorMessageViewModel у вас есть этот код, который выполняется при возникновении ошибок:

class WindowViewModel : Window
{
}

.
.
.

WindowViewModel newDialog = new WindowViewModel();
newDialog.Content = myErrorListViewModel;
newDialog.Parent = mainWindowViewModel;
newDialog.ShowDialog();

Итак, содержимое диалогового окна - это ViewModel для вашего списка ошибок. Определите ваше представление как шаблон данных, который автоматически применяется к ViewModel списка ошибок.

Разве это не похоже на MVVM?

Дело в том, что класс Window - это ViewModel для окна, которое вы видите на экране. Изменяя свойства объекта Window, он влияет на "представление" так же, как если бы свойства WindowView были привязаны к WindowViewModel. Единственное, чего не хватает, так это возможности "изменить стиль" окна с помощью WPF, и это не так. Как бы вы ни старались реализовать это, вы не сможете этого сделать. Пользователь может изменить стиль окна, изменив тему рабочего стола, но вы не контролируете его. Лучшее, что вы можете сделать, - это выключить Chrome и / или сделать его полноэкранным.

3
ответ дан 7 December 2019 в 07:48
поделиться

Вы найдете пример того, как окна (неважно, модальные они или нет) показаны в примере ViewModel этого проекта:

WPF Application Framework (WAF)

http://waf.codeplex.com

2
ответ дан 7 December 2019 в 07:48
поделиться

В моем недавнем Post Blog Вы можете найти простое решение для модальных диалогов и ящиков сообщений в MVVM для Silverlight, но это можно просто использовать в WPF:

Модальные диалоги с MVVM и Silverlight 4

0
ответ дан 7 December 2019 в 07:48
поделиться

Я также работаю над проектом MVVM, где мне нужны модальные диалоговые окна или окна сообщений. Я нашел следующий способ решения этой проблемы:

Программа использует только одно окно. Корневой элемент макета - это сетка без определений строк или столбцов. У сетки есть три дочерних элемента:

  1. Док-панель, которая содержит все обычные вещи, такие как меню, представления с вкладками, строку состояния и так далее.
  2. Сетка с серым фоном и непрозрачностью 50%. Он используется как вуаль, закрывающая док-панель, когда действует модальное окно. Сетка вуали обычно сворачивается.
  3. Сетка, содержащая модальные представления, обычно свернута.

Модель просмотра для главного окна имеет член под названием Modal. Если это значение null, две сетки для модального использования сворачиваются посредством привязки данных и преобразователя для Visibility.Collapsed.

Когда программа хочет отобразить, например, модальное окно сообщения, создается экземпляр MessageBoxViewModel и присваивается MainViewModel.Modal. В MessageBoxViewModel есть команда для кнопки OK. Эта команда вызывает событие, которое снова устанавливает для MainViewModel.Modal значение null.

Сетка вуали закрывает основную панель DockPanel, поэтому никакие элементы управления за пределами модального элемента управления не принимают ввод.

Ваша программа может запускать подкачку сообщений до тех пор, пока не будет нажата кнопка OK, или команда OK может запустить следующую. Есть много способов решения различных задач, но решение Model-ModelView должно их поддерживать.

Я считаю, что это самая хорошая модель представления в модальном режиме, на которую можно надеяться.

1
ответ дан 7 December 2019 в 07:48
поделиться

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

http://www.clr-namespace.com/post/MVVMModal-dialog-before-running-Command.aspx

<Confirm:Confirm IsConfirm="{Binding ElementName=checkBoxConfirm, Path=IsChecked}"
Command="{Binding Path=ButtonCommand}" 
CommandParameter="{Binding ElementName=textBoxParameter, Path=Text}" 
ConfirmMessage="Are you sure you want to fire the command?" 
ConfirmCaption="Question" >
</Confirm:Confirm>
1
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: