0

いいタイトルが思いつかなくてすみません。

私が持っているのは、現在 WCF を呼び出してデータ オブジェクトを保存する [保存] ボタンがある Silverlight ユーザー コントロールです。

このボタンの外観 (またはおそらく 2 つのボタン - 1 つが非表示) を次のように制御できるようにしたいと考えています。

  • オブジェクトに変更がある場合、ボタンには [保存] と表示されます
  • 変更がない場合、ボタンは閉じると表示されます

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 に答える