Проблема DialogResult в wpf - PullRequest
       34

Проблема DialogResult в wpf

4 голосов
/ 18 июля 2011

У меня есть окно, которое я открываю несколько раз как ShowDialog.

Каждый раз, когда я открываю его, я использую новое ключевое слово в первый раз, когда я это сделал:

var myWindow = new MyWindow();
myWindow.ShowDialog();

секундаКогда я открываю его из класса MyWindow View Model:

new MyWindow().ShowDialog();

в коде MyWindow, у меня есть 2 события.один - когда пользователь clcik ок, а другой - когда пользователь нажимает кнопку отмены.

void OnCancel(){
  DialogResult = false;
}

void OnOk(){
  DialogResult = true;
}

События запускаются из класса View Model из формы ICommand Execute, а затем связываются с кнопками "ok" и "cancel" окна.

В xaml я сделал это для кнопки отмены:

IsCancel = true;

И это для кнопки ok:

IsDefault = true;

при первом открытиив окне я могу установить DialogResult = true, но после этого, когда я пытаюсь установить DialogResult, у меня возникает исключение: «Dialofresult можно установить только после того, как окно создано и показано как ShwDialog».

Я также увидел, что DialogResultистинно после того, как в первый раз установлено значение true, и я думаю, что причина исключения, но я не понимаю, почему остается верным, если я закрыл окно и создал новое, используя ключевое слово new ...

Любое предложение

Заранее спасибо

Редактировать: Проблема заключается в том, что, как только я нажимаю кнопку "ОК", DialogResult устанавливается на true и saty true, и я могу 'установить его на False.

Редактировать

Спасибо всем, что решил проблему.

Проблема заключалась в том, что я зарегистрировался в событиях View Model (нажал "ok")и «отмена» нажала) и я удаляю регистр, когда пользователь нажимает «отмена», а не когда он нажимает «ок» ...

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Настройка DialogResult закрывает окно, поэтому вы не можете установить DialogResult снова

Кстати, new Window().ShowDialog() возвращает bool?, а не окно ...

1 голос
/ 18 июля 2011

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

Потому что вы создаете новое окно. Возвращает True, потому что, как вы уже объяснили в первый раз, это так.

...