Вызов «функции» на контроле - PullRequest
1 голос
/ 05 апреля 2010

Я использую MVVM в своем проекте WPF. Теперь я хочу отобразить подокно, когда кто-то нажимает кнопку. Чтобы достичь этого классически, я бы вызвал метод Show (). Теперь, чтобы сохранить ясность моего приложения, нужно привязать кнопку к функции Show () подокна.

Поскольку нажатие кнопки (выбор меню, что угодно) не всегда разрешено, я написал пользовательскую команду, которая оценивает, может ли команда быть выполнена. Однако я не нашел подсказки, как правильно вызвать функцию этого элемента управления. Это смысл делать какой-то классический стиль (код в интерфейсе)?

Изменить (включить код)

XAML:

        <MenuItem Foreground="White" Header="File">
            <MenuItem Header="Login" Background="#FF444444" Command="{Binding Dialog.ApplicationLoginCommand}" />
            <MenuItem Header="Logout" Background="#FF444444" Command="{Binding Dialog.ApplicationLogoutCommand}" />
            <MenuItem Header="Exit" Background="#FF444444" Command="{Binding Dialog.ApplicationShutdownCommand}" />
        </MenuItem>

C #:

public class ApplicationDisplayLoginCommand : ICustomCommand {
    private MyViewModel _ViewModel = null;

    public ApplicationDisplayLoginCommand( MoneyManagementViewModel vm ) {
      _ViewModel = vm;
    }

    #region ICustomCommand Members

    public event CustomCommandExecutedDelegate CustomCommandExecuted;

    #endregion

    #region ICommand Members

    public bool CanExecute( object parameter ) {
      return ! _ViewModel.IsLoggedIn;
    }

    public event EventHandler CanExecuteChanged {
      add {
        CommandManager.RequerySuggested += value;
      }
      remove {
        CommandManager.RequerySuggested -= value;
      }
    }

    public void Execute( object parameter ) {
      if (null != CustomCommandExecuted) {
        CustomCommandExecuted ();
      }
          _ViewModel.Login ();
    }
}

ICustomCommand наследует от ICommand, просто чтобы добавить событие, поскольку одна команда относится к разным интерфейсам, которые требуют, чтобы команда работала по-разному.

НТН

-sa

1 Ответ

1 голос
/ 05 апреля 2010

Невозможно привязать метод, только свойство.Если вам нужно открыть новое окно из вашей ViewModel, взгляните на эту статью Джоша Смита.В нем показано, как отобразить окно сообщения с помощью локатора служб.Вы можете легко адаптировать код для отображения любого окна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...