2

ObservableCollectionWithValidState子オブジェクトの1つが検証ルールに違反したときに自分自身に通知するのに役立つというクラスがあります。

クラス:

child
child  <== violated a passed in Predicate and is now invalid.
child

これが起こったとき、私はDependencyPropertyこのクラスにバインドできるように設定できるものが欲しいです。

問題は、私のクラスが拡張されているのに、ObservableCollection<T>どうやってDependencyObject写真に入るのかわからないことです。

追加したいプロパティの例とともに、クラスの最初の宣言を貼り付けています(これは、拡張できない限り機能しませんDependencyProperty)。

public class ObservableCollectionWithIsValidState<T> : ObservableCollection<T> where T : INotifyPropertyChanged,
{
    public static readonly DependencyProperty IsValidPropertyProperty = DependencyProperty.Register("IsValid", typeof(bool), typeof(ObservableCollectionWithIsValidState<T>), new PropertyMetadata(true));

    public bool IsValid
    {
       get { return (bool)GetValue(IsValidPropertyProperty); }
       set { SetValue(IsValidPropertyProperty, value); }
    }
}

私の2つの質問:

  1. これは可能ですか?
  2. それが不可能な場合、あなたが提案できる代替の実装はありますか?
4

1 に答える 1

2

それは不可能。DependencyPropertyを拡張するクラスでのみ作成できますDependencyObject

MSDNから-DependendyObject

DependencyObjectのサービスと特性には、次のものが含まれます。依存関係プロパティのホスティングサポート。

  • Registerメソッドを呼び出し、メソッドの戻り値をパブリック静的フィールドとしてクラスに格納することにより、依存関係プロパティを登録します。

これは可能ですか?

ありえない

それが不可能な場合、あなたが提案できる代替の実装はありますか?

プロパティの検証には、 INotifyPropertyChanged、およびIDataErrorInfoを通常のCLRプロパティとともに使用します。

于 2013-01-11T03:33:36.880 に答える