0

.NET クラスを補完するものとして for 値型ObservableValue<T>を実装するように書きました。INotifyPropertyChangedObservableCollection<T>

class ObservableValue<T> : INotifyPropertyChanged {
    private T value;
    private PropertyChangedEventHandler eh;

    event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged {
        add { eh += value; }
        remove { eh -= value; }
    }

    public T Value {
        get { return value; }
        set {
            this.value = value;
            OnPropertyChanged();
        }
    }

    void OnPropertyChanged() {
        if (eh != null)
            eh(this, new PropertyChangedEventArgs("Value"));
    }
}

ただし、このクラスを使用するObservableValue<T>.Valueには、 だけでなく にバインドする必要がありObservableValue<T>ます。ObservableValue<T>有効なコンテキストで使用できるようにする魔法のコードを書くことは可能Tですか?

4

1 に答える 1

1

いいえ、どのコンテキストでも行うことはできません。具体的には、またはtype のパラメーターをObservableValue<T>使用してメソッドに渡すことができるようにすることはできません。refoutT

ただし、暗黙的な変換演算子from ObservableValue<T>to を定義することで、もう少し近づけることができます。ユーザーは、明示的に参照せずに、値を受け取る to メソッドTのインスタンスを渡したり、型の変数に代入したりできます。ObservableValue<T>TObservableValue<T>T.Value

public static implicit operator T(ObservableValue<T> ot) {
    return ot.Value;
}

もちろん、 が予期されるObservableValue<T>コンテキストで使用されるとT、観察可能な動作が失われます。イベントはトリガーされず、元のObservableValue<T>オブジェクトは変更されません。

于 2013-11-03T11:43:53.447 に答える