2016-01-03 7 views
0

У меня есть несколько просадок, которые определены на моем MainWindow. Я хочу открыть их из представления моего приложения WPF.Как вызвать метод MainWindow из View с помощью Caliburn Micro?

Когда я пытаюсь связать свою команду, я не получаю никаких ошибок, но вылет не открывается. Когда я вызываю метод непосредственно в MainWindow, открывается всплывающее окно.

Способ по MainWindow.xaml.cs

public ICommand openFlyoutHomeCommand { get; private set; } 
    public void openFlyoutHome() 
    { 
     FlyoutHomePlayers.IsOpen = true; 
    } 

И связывании с точки зрения, которая показана в MainWindow:

<Button Grid.Row="0" Grid.Column="1" Margin="10 30 10 10" Content="Open Flyout" Command="{Binding openFlyoutHome}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"></Button> 
+2

вам было бы лучше использовать IEventAggregator для отправки сообщения в mainwindow, чтобы открыть всплывающее окно. Это будет обрабатываться в viewmodel основного окна. ссылка 'IHandle ' наследуется на вашей модели просмотра и подписывается на сообщения о событиях – mvermef

+0

Если вы используете Caliburn.Micro MainWindow не должны быть в вашем проекте. Главное ваше представление должно быть ShellView, и ваша «модель просмотра» должна быть ShellViewModel – C1rdec

ответ

0

Во-первых, обратитесь к выходной консоли, чтобы увидеть, есть ли обязательное предупреждение.

Затем вы должны назначить экземпляр команды вашему openFlyoutHomeCommand. Этот экземпляр должен ссылаться на делегат, который вызывает ваш метод openFlyoutHome (или создает анонимный делегат, который имеет такое же поведение).

В вашем примере кода ваше свойство openFlyoutHomeCommand равно null.