WPF视图和ModelView创建

时间:2016-06-12 17:30:03

标签: c# wpf

由于视图和模型视图对象实例化,我分心了。举个例子: 我使用 listview LV 和一个按钮查看V 。按钮是绑定命令,作为参数 listview LV 。命令 CanExecute 方法检查 listView LV 是否包含元素。但是当我打开视图V 时,视图模型对象会在视图V 之前创建。因此,当 CanExecture 方法检查 listView 时,它为空,我的按钮永远不会变得不可用。

如何解决这个问题?

编辑: 命令实现:

public class DelegateCommand : ICommand
{
    public event EventHandler CanExecuteChanged;

    private readonly Action<object> _execute;
    private readonly Func<object, bool> _canExecute;

    public DelegateCommand(Action<object> execute, Func<object, bool> canExecute = null)
    {
        if (execute == null)
        {
            throw new ArgumentNullException(nameof(execute));
        }

        this._execute = execute;
        this._canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute == null || _canExecute(parameter);
    }

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

    public void RaiseCanExecuteChanged()
    {
        CanExecuteChanged?.Invoke(this, EventArgs.Empty);
    }
}

1 个答案:

答案 0 :(得分:0)

对于那种命令实现,你必须手动调用RaiseCanExecuteChanged()(在你的情况下,在列表视图获得项目之后)。

您还可以将CanExecuteChanged事件的实施更改为:

[...]

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

[...]

该实现使命令管理器能够自动评估CanExecute。