在控制上调用“功能”

时间:2010-04-04 20:58:11

标签: wpf mvvm

我在WPF项目中使用MVVM。现在我想在有人按下按钮时显示子窗口。为了实现这一点,我将调用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,只是为了添加事件,因为一个Command特定于不同的前端,需要命令行为不同。

HTH

-sa

1 个答案:

答案 0 :(得分:1)

您无法绑定到方法,只能绑定到属性。如果您需要从ViewModel打开一个新窗口,请查看Josh Smith的this article。它显示了如何使用服务定位器显示消息框。您可以轻松调整代码以显示任何窗口