ShowDialog для компонента MEF работает только один раз - PullRequest
4 голосов
/ 31 мая 2010

Я создал окно WPF и сделал его MEF Export.

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

Что можно сделать, чтобы разрешить повторы ShowDialog?

Ответы [ 2 ]

3 голосов
/ 31 мая 2010

Когда вы вызываете ShowDialog в окне WPF дважды, как это:

var window = new Window();
window.ShowDialog(); // returns when user closes first window
window.ShowDialog(); // throws 

вы получите InvalidOperationException с этим сообщением:

Невозможно установить видимость или вызов Показать или ShowDialog после закрытия окна.

Чтобы это исправить, вам нужно каждый раз пересматривать окно, например, как это:

var window = new Window();
window.ShowDialog();
window = new Window();
window.ShowDialog();

Чтобы сделать это в MEF , вы можете экспортировать отдельный компонент контроллера, который отвечает за создание и последующее отображение вашего диалога (а не экспорт напрямую):

[Export]
public class MyDialogController
{
   public void ShowMyDialog()
   {
      using (var myDialog = new MyDialog())
      {
          myDialog.ShowDialog();
      }
   }
}
0 голосов
/ 30 июля 2010

Дополнительные примеры использования MEF в приложении WPF можно найти в WPF Application Framework (WAF) загрузки проекта (см. Примеры приложений).

...