オブジェクトのネストされたプロパティの値を取得したい(Person.FullName.FirstNameのようなもの)。私は.NETでそれがバインディングで同様の目的のために使用するPropertyPathという名前のクラスがあることを知っていました。 WPFのメカニズムを再利用する方法はありますか、それとも私自身で書くべきですか?PropertyPathクラスを使用してオブジェクトのプロパティ値を取得する方法はありますか?
7
A
答えて
12
PropertyPathを再利用することは、ネストされたプロパティを指し示して指し示すようにトラバースすることをサポートするので魅力的です。あなたは自分でも同じような機能を書くことができますが、私は過去に自分自身を持っていますが、半複雑なテキスト解析と多くの反射作業が必要です。
Andrewは、単にWPFからPropertyPathを再利用できることを指摘しています。私はちょうどそのコードが少し関与している場合にあなたが持っているオブジェクトに対してそのパスを評価したいと思っています。 PropertyPathを評価するには、DependencyObjectに対するBindingで使用する必要があります。これを実証するために、ただ1つのDependencyPropertyを持つBindingEvaluatorという単純なDependencyObjectを作成しました。真のマジックは、BindingOperations.SetBindingを呼び出してバインディングを適用し、評価された値を読み取ることによって行われます。
var path = new PropertyPath("FullName.FirstName");
var binding = new Binding();
binding.Source = new Person { FullName = new FullName { FirstName = "David"}}; // Just an example object similar to your question
binding.Path = path;
binding.Mode = BindingMode.TwoWay;
var evaluator = new BindingEvaluator();
BindingOperations.SetBinding(evaluator, BindingEvaluator.TargetProperty, binding);
var value = evaluator.Target;
// value will now be set to "David"
public class BindingEvaluator : DependencyObject
{
public static readonly DependencyProperty TargetProperty =
DependencyProperty.Register(
"Target",
typeof (object),
typeof (BindingEvaluator));
public object Target
{
get { return GetValue(TargetProperty); }
set { SetValue(TargetProperty, value); }
}
}
これを拡張したい場合は、変更された値の読み取りをサポートするためにPropertyChangedイベントを配線することができます。私はこれが助けて欲しい!
0
再利用できない理由はありません。
はPropertyPath
を見る
は は別のプロパティ以下の経路として、又は所有 タイプの下にプロパティを記述するためのデータ構造を実装します。プロパティパスは、オブジェクトにバインドする のデータ、およびアニメーション用のストーリーボード とタイムラインで使用されます。
関連する問題
- 1. 親オブジェクトからプロパティを取得する方法はありますか?
- 2. オブジェクトを使用してオブジェクトのプロパティのサブセットを取得する方法
- 3. Reflection.Emitを使用して別のオブジェクトからプロパティ値を取得
- 4. コンポーネントのプロパティを取得してnilにする方法はありますか?
- 5. Javaを使用してプロパティXMLから値を取得する方法は?
- 6. WebApiとカスタム値バインダーを使用して複雑なオブジェクトにプロパティをバインドする方法はありますか?
- 7. リフレクションを使用してクラスのリストからプロパティから値を取得する
- 8. このクラスにランダムな値を取得する方法はありますか?
- 9. 使用時にインデックス値を取得する方法はありますか?Array.IndexOf?
- 10. リフレクションを使用して継承プロパティの値を取得する方法は?
- 11. JQueryを使用してCSSプロパティの値を取得する方法は?
- 12. オブジェクトのメモリアドレスをNSStringとして取得する方法はありますか?
- 13. PHPを使用してjsonオブジェクトの一部の長さを取得する方法はありますか?
- 14. 値のインデックスを取得する方法はありますか?
- 15. カラムの値を取得する方法はありますか?
- 16. HttpPostedFileクラスを使用してアップロードの進捗状況を取得する方法はありますか?
- 17. 動的プロパティキーを使用してjavascriptオブジェクトのプロパティ値を取得
- 18. WSO2 ESBでプロパティの設定値を取得して使用する方法は?
- 19. Iron Pythonスクリプトを使用してスポットファイアテーブルの列から値を取得する方法はありますか?
- 20. Stringを介してクラスのObjectから値を取得する方法はありますか?
- 21. 同じクラス(Python)内でクラスをインスタンス化したオブジェクトを取得する方法はありますか?
- 22. javascriptオブジェクトのすべてのキーのプロパティを取得する簡単な方法はありますか?
- 23. JavaScriptを使用してクラス名で要素を取得する方法はありますか?
- 24. 値を取得する方法はありますか
- 25. ELを使用してh:inputTextフィールドの現在の値を取得する方法はありますか?
- 26. 頂点を使用してレコードタイプのSalesforceのピックリスト値を取得する方法はありますか?
- 27. QObject派生クラスのクラス名を取得する方法はありますか?
- 28. C#を使用して、Flashオブジェクト(swf)で内部http要求を取得する方法はありますか?
- 29. Dapper ORMを使用して子オブジェクトの値を取得する方法は?
- 30. Javaを使用してJasperReportsパラメータ(JRParameterオブジェクト)の値を取得する方法は?
どのようにそのプロパティに書き戻しますか? –
対象を更新するコードサンプルを更新しました。 BindingがTwoWayであることを確認し、セッターを提供するだけです。 –