WPF закрывает окно при изменении свойства в ViewModel - PullRequest
0 голосов
/ 09 июня 2011

Мне было интересно, есть ли способ закрыть окно при изменении свойства в модели представления. В моей ситуации у меня есть окно входа в систему с кнопкой Ok, привязанной к команде LoginCommand, чтобы функция Login выполнялась при нажатии кнопки Ok. Если вход выполнен успешно, я хочу закрыть окно.

Теперь я знаю, что могу сделать это, добавив обработчик событий на мою кнопку, который вызывает такую ​​функцию:

private void Button_Click(object sender, RoutedEventArgs e)
{
  DatabaseCredentialsViewModel vm = (this.DataContext as DatabaseCredentialsViewModel);
  vm.Login();

  if (vm.LoginSuccessful)
  {
    this.Close();
  }
}

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

Спасибо

Ответы [ 3 ]

2 голосов
/ 09 июня 2011

Вот похожий вопрос , который заполнил мою потребность.

По сути, вы используете прикрепленное свойство для вашего окна, которое привязывается к свойству bool? на вашей виртуальной машине. Когда для свойства VM установлено значение, отличное от NULL, в прикрепленном свойстве устанавливается значение DialogResult окна, которое автоматически закрывает окно.

1 голос
/ 09 июня 2011

Если хотите, можете попробовать другой подход.
Вы можете сделать это, связав кнопку ОК с командой. Создайте событие, такое как LoginSuccess, а затем добавьте window.Close () в список обратного вызова события. Тогда вам нужно только вызвать событие LoginSuccess, чтобы закрыть окна.
На мой взгляд, это касается шаблона MVVM, определяющего событие, которое можно использовать для другого триггера, а не только для закрытия окон.

0 голосов
/ 09 июня 2011

Вы можете сделать это довольно легко, создав прикрепленное свойство или Поведение (из Blend SDK), которое подключено к вашему окну.

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

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