このプロパティを書くのCLRの方法です:WPF依存関係プロパティでプログラムで 'get'を使用する方法は?
public byte Value
{
get{
return GetByteData();
}
set{
SetByteData(value);
}
}
私は同じ依存関係プロパティの方法を行う方法をよく読んできたが、これは私が自分で精一杯です:
public byte Value
{
get { return (byte)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
"Value", typeof(byte), typeof(MyControl),
new FrameworkPropertyMetadata((byte)0, ValueChanged));
public static void ValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
byte r = (byte)e.NewValue;
MyControl v = (MyControl)d;
v.SetByteData(r);
}
上記のスニペットを作成した例を見て、GetByteData()
を配置する場所を見つけることができません。これは、ユーザーが対話するときの現在のUI状態の出力値を計算し、 'Value'を更新します。
これまではclrのようにゲッターに入れていましたが、間違ったアプローチだと感じましたが、間違っている可能性があります。どこに置くべきですか?もしそうでなければ、私のアプローチは何ですか?依存関係プロパティのためのプログラム的なゲッターを持つことは可能でしょうか?
解決策を探す際に間違ったキーワードを使用している可能性があります。私を正しい方向に導く助けがあれば、大変感謝しています。前もって感謝します。
は残念ながら、依存関係プロパティは、 "コールバックを取得" がありません。それらのゲッターは常に、以前に設定された値(直接またはバインディング、スタイル、デフォルト値など)を返します。なぜあなたの財産は依存財産でなければならないのですか? – Clemens
PropertyChangedCallbackの 'v.Value = r'の代入は冗長であることにも注意してください。プロパティは既にその値を持っています。サンプルコードから削除しました。 – Clemens
ああ!全く別のアプローチ!つまり、ユーザーが対話するたびにイベントを発生させて依存関係の値を更新する必要がありますか? UIを同期させるために毎回 'SetByteData'を使うと思います。重複しているのですが、状態変数を使用してやり直しをスキップすることができると思います。 @依存関係が必要な理由: '{Binding Value、ElementName = MyControlName}'には別のUI要素が必要です。私はこれがclrのプロパティでうまくいくかどうか分かりません... – RiA