C# WPF ViewModel RelayCommand继承
我想创建一个特殊的命令类,我称之为DropDownRelayCommand,它将用于一个下拉按钮,该按钮的内容由带有命令的按钮组成 其想法是,如果下拉按钮的内容中没有按钮被启用,则下拉按钮应该被禁用或可能被折叠。我想创建一个通用解决方案 无论如何,我无法在XAML中以通用的方式完成这项工作 我希望这个DropDownRelayCommand有自己的CanExecute方法,它应该检查所有包含命令的CanExecute。问题在于下面代码中标记的参数出现了此错误:非静态字段、方法或属性“Js.Mvvm.DropDownRelayCommand.CanDropDownExecuteT”需要对象引用。 我不能使用它,因为构造函数中不允许使用它 这是我的代码,我知道包含命令的命令可能会接收canexecute请求,这使它有点无效。但通常我只有少数几个命令,因此性能可能并不那么重要:C# WPF ViewModel RelayCommand继承,c#,wpf,inheritance,mvvm,C#,Wpf,Inheritance,Mvvm,我想创建一个特殊的命令类,我称之为DropDownRelayCommand,它将用于一个下拉按钮,该按钮的内容由带有命令的按钮组成 其想法是,如果下拉按钮的内容中没有按钮被启用,则下拉按钮应该被禁用或可能被折叠。我想创建一个通用解决方案 无论如何,我无法在XAML中以通用的方式完成这项工作 我希望这个DropDownRelayCommand有自己的CanExecute方法,它应该检查所有包含命令的CanExecute。问题在于下面代码中标记的参数出现了此错误:非静态字段、方法或属性“Js.Mvv
public class DropDownRelayCommand<T> : RelayCommand<T>
{
private readonly List<RelayCommand<T>> _commands = new List<RelayCommand<T>>();
private bool _hasAnyCanExecute;
#region Constructors
public DropDownRelayCommand(Action<T> execute, params RelayCommand<T>[] commands)
: base(execute, **CanDropDownExecute**)
{
AddCommandRange(commands);
}
public bool CanDropDownExecute(T argument)
{
_hasAnyCanExecute = false;
foreach (RelayCommand<T> command in _commands)
{
_hasAnyCanExecute = _hasAnyCanExecute || command.CanExecute(argument);
}
return _hasAnyCanExecute;
}
#endregion
#region Public Methods
public void AddCommandRange(params RelayCommand<T>[] commands)
{
if (commands == null) return;
foreach (RelayCommand<T> command in commands)
{
_commands.Add(command);
}
}
public void RemoveCommandRange(params RelayCommand<T>[] commands)
{
if (commands == null) return;
foreach (RelayCommand<T> command in commands)
{
if (_commands.Contains(command))
{
_commands.Remove(command);
}
}
}
#endregion
}
是否确实需要从此处的RelayCommand派生命令?我们到底在谈论什么样的社区?我的问题是要找出为什么需要将CanExecute逻辑作为委托传递,而不仅仅是重写继承的方法。RelayCommand的设计目的不是这样使用,它是为了让您通过委托访问命令。我认为您应该创建一个实现ICommand的类。