2016-11-29 8 views
0

У меня проблема с Caliburn.Micro: У меня есть ShellView.xaml и ShellViewModel.cs, и я хочу открыть новое диалоговое окно 'NewDialogView. xaml 'из ShellViewModel.Caliburn.Micro: открытие нового окна из главного окна, а затем подключение его к viewmodel

<StackPanel> 
    <Button x:Name="Click" 
      Content="Click" 
      /> 
</StackPanel> 

internal class ShellViewModel 
{ 
    public void Click() 
    { 
     Window newDialogView = new NewDialogView(); 
     newDialogView.Show(); 
    } 
} 

Затем, когда пользователь находится в этом новом окне, он/она может нажать на кнопку и получить сообщение:

<StackPanel> 
    <Button x:Name="ShowMessage" 
      Content="Click" 
      /> 
</StackPanel> 

internal class NewDialogViewModel 
{ 
    public void ShowMessage() 
    { 
     MessageBox.Show("Hello!"); 
    } 
} 

Проблема заключается в том, что, когда пользователь нажимает кнопку в NewDialogView.xaml, ничего не происходит. В содержании «Hello» нет сообщения. Пожалуйста помоги!

+3

Reference WindowManager – mvermef

+0

Я понял. Благодарю. – Navuhodonosor

ответ

1

Просто чтобы узнать, что сказал @mvermef в комментарии выше.

Чтобы открыть диалоговое окно, вы должны использовать оконный менеджер Caliburn Micro. Затем Caliburn сможет выполнять всю сантехнику в фоновом режиме. Как правило, вы должны использовать загрузчик Caliburn для создания ShellViewModel с помощью оконного менеджера.

internal class ShellViewModel 
{ 
    public ShellViewModel(IWindowManager theWindowManager) 
    { 
     this.windowManager = theWindowManager; 
    } 

    public void Click() 
    { 
     // Assumes that there is a NewDialogView... 
     var newDialogViewModel = new NewDialogViewModel(); 
     bool? result = this.windowManager.ShowDialog(newDialogViewModel); 
     // result is true if user pressed ok button... 
    } 
} 
+0

Но 'WindowManager.ShowDialog()' возвращает значение nullable boolean (nullabool? Hehe). Что я делаю, если я действительно хотел логическое значение: 'bool result = this.windowManager.ShowDialog (newDialogViewModel) ?? ложь; '. – Doom5

+1

@ Doom5 'result.GetValueOrDefault()' достигает чего-то подобного, но IMHO немного более аккуратен. Устранили объявление результата. –

+0

Ницца. На самом деле это более аккуратно. – Doom5