类库无法识别CommandManager类

时间:2013-06-05 22:14:46

标签: c# wpf mvvm command class-library

我正在开发WPF应用程序,我想重用我在所有这些应用程序中相同的类,因此我可以将它们作为参考添加。

在我的情况下,我有一个我的命令类:

public class RelayCommand : ICommand
{
    #region Fields

    readonly Action<object> _execute;
    readonly Predicate<object> _canExecute;

    #endregion // Fields

    #region Constructors

    public RelayCommand(Action<object> execute)
        : this(execute, null)
    {

    }

    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");

        _execute = execute;
        _canExecute = canExecute;
    }
    #endregion // Constructors

    #region ICommand Members

    public bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }

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

    public void Execute(object parameter)
    {
        _execute(parameter);
    }

    #endregion // ICommand Members
}

这在我的应用程序中非常有效,但是当我想创建一个我想在项目中添加的类库时,Visual Studio无法构建,因为“ CommandManager 不会存在于当前背景下“。在我的使用中,我有以下(这应该就够了)

 using System;
 using System.Windows.Input;

为什么我不能在“类库项目”中做到这一点?

1 个答案:

答案 0 :(得分:53)

转到&#34;参考文献&#34;您的类库的一部分,然后选择&#34;添加参考&#34;。寻找一个名为&#34; PresentationCore&#34;并添加它。

然后在您的类文件中添加using语句using System.Windows.Input;

然后您可以按预期访问CommandManager。

只需添加:很多人在创建类库时,会选择&#34; WPF自定义控件库&#34;然后删除&#34; Class1.cs&#34;文件。它是一种自动将正确的命名空间添加到库中的快捷方式。无论是好的还是坏的快捷方式都是任何人的通话,但我一直都在使用它。