0

抱歉,我想不出更好的标题。

我拥有的是一个 Silverlight 用户控件,它有一个按钮 Save 当前调用 WCF 来保存数据对象。

我希望能够以以下方式控制此按钮的外观(或者可能是 2 个按钮 - 一个是隐藏的):

  • 如果对象有更改,按钮会显示保存
  • 如果没有更改,按钮显示关闭

如果我调用一个方法说 HasChanges,我可以检查对象的变化。但是没有任何事件可以通知我发生了变化。

我可以以某种方式为此目的使用 ICommand 吗?

(我可能会添加一个事件并确保每次用户更改某些内容时都会触发它,但这是我不想做的事情)。

4

1 回答 1

1

恐怕我只能想到你提到的解决方案。每次更改属性时添加一个事件。您可以将其集中用于整个班级,以避免向每个属性添加样板代码。

如果您正在使用 MVVM 并实现,您可以在应该在属性的设置器中触发的方法中INotifyPropertyChanged查询您的方法HasChangesOnPropertyChangedOnPropertyChange("xyz")

class ClassA : INotifyPropertyChanged
{
    private bool _name;
    public bool Name
    {
        get { return _name; }
        set
        {
            if (value != _name)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));


        IsSaveEnable = HasChanges();
    }
}

另一种可能的解决方案是在IDataErrorInfo实现中使用公共验证区域。但可能不是放置此逻辑的正确位置

http://codeblitz.wordpress.com/2009/05/08/wpf-validation-made-easy-with-idataerrorinfo/

最后,可以创建具有此行为的特定附加属性。换句话说,这个想法是手动实现 EventToCommand 模式的功能并在那里添加您的自定义逻辑。

关于启用/禁用命令,如果您使用的是 DelegateCommand 或 RelayCommand,您可以调用命令 RaisePropertyChanged 自动启用/禁用按钮

于 2013-06-03T13:36:08.190 回答