25

我正在开发 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;

任何想法为什么我不能在“类库项目”中这样做?

4

1 回答 1

56

转到类库的“引用”部分,然后选择“添加引用”。查找名为“PresentationCore”的程序集并添加它。

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

然后,您将能够按预期访问 CommandManager。

只是补充一下:很多人在创建类库时,他们选择“WPF自定义控件库”,然后删除“Class1.cs”文件。这是一个快捷方式,可以自动将正确的命名空间添加到您的库中。捷径是好是坏是任何人的决定,但我一直都在使用它。

于 2013-06-05T23:11:43.207 回答