2

我正在使用 MVVM 灯光工具包来处理按钮单击。如果我做:

CustomerSaveCommand = new RelayCommand(
    () => CustomerSave(),
    ()=> true);

private void CustomerSave() {
    customer.Address="My Street";
}

该函数被调用,但 UI 中绑定的地址字段未更新。

如果我放入customer.Address="1234"ViewModel 构造函数,则 UI 会更新。我究竟做错了什么?

编辑:

问题真的很奇怪:如果我viewModel.customer.City = "CITY1"在窗口加载它运行,如果我添加一个按钮,并且在代码隐藏点击中,我添加viewModel.customer.City = "CITY2"它不起作用。

4

2 回答 2

2

viewmodel 中的客户对象需要实现INotifyPropertyChanged接口。

然后在地址属性设置器中,您将调用 PropertyChanged 事件。

或者,您的 viewModel 可以实现 INotifyPropertyChanged 接口,并且可以包装 Address 属性并调用 PropertyChanged 事件。您必须更新绑定,但您的模型对象不必实现任何接口。

您在构造函数中修改对象时看到显示地址的原因是因为尚未发生绑定。为了更新 UI,您需要指示绑定引擎属性绑定已更改。为此,您使用 INotifyPropertyChanged 接口。

于 2012-09-30T16:00:24.500 回答
0

尝试这样的事情:

    public class AutoDelegateCommand : RelayCommand, ICommand
{
    public AutoDelegateCommand(Action<object> execute)
        : base(execute)
    {
    }

    public AutoDelegateCommand(Action<object> execute, Predicate<object> canExecute)
        : base(execute, canExecute)
    {
    }

    event EventHandler ICommand.CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}
于 2012-09-30T14:57:56.527 回答