从Action / Command设置数据上下文中的属性

时间:2013-07-28 20:05:40

标签: c# wpf data-binding mvvm command

我的XAML中有DataTrigger绑定到属性,我的ViewModel类中有'ShowEffect'。我还有一个绑定到调用方法的RelayCommand(如下所示的类)的按钮。在那个方法中,我将'ShowEffect'设置为true。但是,DataTrigger似乎没有回应;效果未显示:

我使用以下方式声明属性:

private Boolean _ShowEffect;
    public Boolean ShowEffect
    {
        get { return _ShowEffect; }
        set { _ShowEffect = value; }
    }

RelayCommand分组:

public class RelayCommand : ICommand
{
    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;
    }
    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);
    }
    private readonly Action<object> _execute;
    private readonly Predicate<object> _canExecute;
}

我想知道这个问题是否与调度员有关。当我在命令调用的方法中设置属性时,有人可以建议为什么绑定不起作用吗?当我在ViewModel中的任何其他位置设置属性时,它可以工作。

1 个答案:

答案 0 :(得分:0)

将之前的评论转换为答案。

  

你的VM需要实现INPC,如果它还没有,并且ShowEffect需要在更改它时(从值的更改时的setter)更改属性更改处理程序,以便对View进行更改。你现在得到的是一个简单的属性,它不会通知查看对它所做的任何更新,当命令改变它的值但是视图永远不会知道更改并且你的DataTrigger似乎不起作用时,会发生什么。 / p>

INotifyPropertyChanged接口通知视图中VM的属性已更改。因此,您的属性需要为其引发PropertyChanged处理程序,从而通知视图对其所做的任何更改。