1. ホーム
  2. .net

読み取り専用の依存性プロパティを作成する方法は?

2023-11-01 05:23:26

質問

読み取り専用の依存性プロパティを作成するにはどうすればよいですか。そうするためのベストプラクティスは何ですか。

具体的に言うと、私が最も困っているのは

DependencyObject.GetValue()  

を取るもので System.Windows.DependencyPropertyKey をパラメータとする

System.Windows.DependencyProperty.RegisterReadOnly はDを返す。 ependencyPropertyKey オブジェクトではなく DependencyProperty . では、GetValue を呼び出すことができない場合、読み取り専用の依存性プロパティにどのようにアクセスすることになるのでしょうか?あるいは DependencyPropertyKey を古い DependencyProperty オブジェクトに変換できますか?

アドバイスやコードをいただけると大変ありがたいです。

どのように解決するのですか?

簡単です、実は(via RegisterReadOnly ):

public class OwnerClass : DependencyObject // or DependencyObject inheritor
{
    private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey
        = DependencyProperty.RegisterReadOnly(
            nameof(ReadOnlyProp),
            typeof(int), typeof(OwnerClass),
            new FrameworkPropertyMetadata(default(int),
                FrameworkPropertyMetadataOptions.None));

    public static readonly DependencyProperty ReadOnlyPropProperty
        = ReadOnlyPropPropertyKey.DependencyProperty;

    public int ReadOnlyProp
    {
        get { return (int)GetValue(ReadOnlyPropProperty); }
        protected set { SetValue(ReadOnlyPropPropertyKey, value); }
    }

    //your other code here ...
}

プライベート/プロテクト/内部コードで値を設定するときのみキーを使用します。保護されているため ReadOnlyProp セッターのため、これはあなたにとって透過的です。