0

そのため、依存関係プロパティを機能させるのに問題があります。しかし、実際には、別のクラスからそれらにアクセスしようとしている場合のみです。

たとえば、サーバーに ping を実行し、対応する依存関係プロパティを定義するチェックを行っています。

        public static DependencyProperty PingStateProperty =
        DependencyProperty.Register("PingState", typeof(bool),
        typeof(MainWindow));

    public bool PingState
    {
        get { return (bool)GetValue(PingStateProperty); }
        set
        {
            SetValue(PingStateProperty, value);
            PropertyChanged(this, new PropertyChangedEventArgs("PingState"));
        }
    }

ここで、別のクラス (具体的にはユーザー コントロール) の Dependency プロパティから値を取得したいと考えています。だから私は次のような値を取得しようとしている別のクラスを持っています:

    public void MethodInClass2()
    {
        bool ping = (bool)GetValue(MainWindow.PingStateProperty);

ここで何が間違っていますか?私を悩ませているのは、同じクラスで GetValue を呼び出すと機能することです。コンパイルエラーなどは発生しません。正しい値を渡していないように見えます(DPが定義されているクラス1では、値を確認して期待どおりに「true」を取得できますが、クラス2でも同じことをします。毎回「false」になります)。

このような場合、添付プロパティは必要ですか? それらも少し試してみましたが、残念ながら役に立ちませんでした。

ご挨拶

4

3 に答える 3

1

以前に設定していない限り、値を取得することはできません。また、ターゲット オブジェクトが添付プロパティでない限り、同じ型または派生オブジェクトである場合にのみ、その値を設定できます。GetValueこのように呼び出すと、メイン ウィンドウからプロパティが取得されず、現在のインスタンス (ユーザー コントロール) からプロパティが取得されます。

CLR ラッパーに追加のコードを配置しないpublic bool PingStateでください ( )。プロパティに適切にアクセスするときに、バインディング システムまたはその他の方法で呼び出されることはありません。プロパティが変更されたコールバックを取得するには、プロパティの登録時にメタデータを使用します。

于 2016-08-11T16:24:24.950 に答える