我的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中的任何其他位置设置属性时,它可以工作。
答案 0 :(得分:0)
将之前的评论转换为答案。
你的VM需要实现INPC,如果它还没有,并且ShowEffect需要在更改它时(从值的更改时的setter)更改属性更改处理程序,以便对View进行更改。你现在得到的是一个简单的属性,它不会通知查看对它所做的任何更新,当命令改变它的值但是视图永远不会知道更改并且你的DataTrigger似乎不起作用时,会发生什么。 / p>
INotifyPropertyChanged接口通知视图中VM的属性已更改。因此,您的属性需要为其引发PropertyChanged处理程序,从而通知视图对其所做的任何更改。