RelayCommand для кнопки в другом окне - PullRequest
1 голос
/ 25 января 2011

У меня есть главное окно и другое окно, называемое Loginwindow.В какой-то момент это LoginWindow появится, чтобы получить некоторую информацию для входа в систему ... В LoginWindow у меня есть кнопка, и ее свойство Command привязывается к OkCommand в MainViewModel следующим образом:

<Button Content = "Ok" Command="{Binding OkCommand}"/>

В моем MainVeiwModelдобавлен OkCommand RelayCommand

public RelayCommand OkCommand
{
    get { return new RelayCommand(OkClose); }
}

private void OkClose()
{
    MessageBox.Show("Close Login");
}

этот код работает хорошо, и MessageBox появился, когда я нажимаю кнопку Ok ... но как закрыть окно LoginWindow, когда я нажимаю кнопку Ok ...

Ответы [ 2 ]

1 голос
/ 25 января 2011

Я предлагаю очень простое решение. Не связывайте команду и просто обрабатывайте событие Clicked в коде LoginWindow. Оттуда будет очень легко закрыть окно.

Есть ли еще одна причина, по которой вы обрабатываете кнопку ОК в ВМ другого окна?


В XAML (window.xaml):

<Button Content="OK" Click="button1_Click" />

В коде позади (window.xaml.cs):

private void button1_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}
0 голосов
/ 25 января 2011

EDIT:

Первый способ, стиль MVVM

  1. Добавить событие RequestClose на вашу виртуальную машину. И поднять это событие при выполнении OkCommand.
  2. Там, где вы показываете свой диалог и привязываете виртуальную машину к окну, также добавьте обработчик для этого события, например:

    var window = new MyDialogWindow ();

    window.DataContext = loginViewModel;

    loginViewModel.RequestClose + = (s, e) => window.Close ();

Второй способ, передать окно как CommandParameter :

Установить свойство Name для вашего окна:

<Button Content = "Ok" Command="{Binding OkCommand}" 
CommandParameter="{Binding ElementName=_windowName}"/>

Или

<Button Content = "Ok" Command="{Binding OkCommand}" 
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>

И закрыть окно в команде execute:

public void Execute(object parameter)
{
    var wnd = parameter as Window;
    if (wnd!= null)
        wnd.Close();
}

Смотрите также: Свойство IsDefault и IsCancel для кнопки.

...