オブジェクトのネストされたプロパティの値を取得したい(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. Reflection.Emitを使用して別のオブジェクトからプロパティ値を取得
- 3. リフレクションを使用してクラスのリストからプロパティから値を取得する
- 4. JQueryを使用してCSSプロパティの値を取得する方法は?
- 5. リフレクションを使用して継承プロパティの値を取得する方法は?
- 6. オブジェクトのメモリアドレスをNSStringとして取得する方法はありますか?
- 7. PHPを使用してjsonオブジェクトの一部の長さを取得する方法はありますか?
- 8. HttpPostedFileクラスを使用してアップロードの進捗状況を取得する方法はありますか?
- 9. Dapper ORMを使用して子オブジェクトの値を取得する方法は?
- 10. ELを使用してh:inputTextフィールドの現在の値を取得する方法はありますか?
- 11. apache.commonsを使用してプロパティのリストを取得する方法
- 12. JavaScriptを使用してクラス名で要素を取得する方法はありますか?
- 13. PowerShellでオブジェクトのプロパティの値をプロパティ名で取得する方法は?
- 14. C#を使用して、Flashオブジェクト(swf)で内部http要求を取得する方法はありますか?
- 15. QObject派生クラスのクラス名を取得する方法はありますか?
- 16. クラスをHashmapに渡し、キーを使用して値を取得する方法
- 17. 構造体を使用して値を取得および設定する方法はありますか?
- 18. jsonオブジェクトから情報を取得する方法、属性を取得する方法はありますか?
- 19. JavaScriptでオブジェクトを使用してキーで値を取得して取得する方法は?
- 20. NSUserDefaultsにすべての値を取得する方法はありますか?
- 21. jQueryを使用してクラス値を使用してId値を取得する
- 22. Pythonを使用してJSONオブジェクトの値/コンテンツを取得する方法
- 23. WPF、XAML:ListBox ItemsSourceオブジェクトのプロパティでバインディングを使用してListBoxItemをスタイルする方法はありますか
- 24. ジャクソンを使用してJSONオブジェクトのプロパティを簡単に平坦化する方法はありますか?
- 25. [array objectAtIndex:]から取得したオブジェクトにプロパティを追加する方法はありますか?
- 26. mvc3のforeachを使用してSessionオブジェクトから値を取得する必要がありますか?
- 27. テーブルレイアウトを使用してtableRow値を取得する方法は?
- 28. Rubyオブジェクトのパブリック "プロパティ"を取得するより良い方法はありますか?
- 29. PHPリフレクションを使用してプロパティのデフォルト値を取得する
- 30. Javaスクリプトを使用してサーバーコントロールのプロパティ値を取得する
どのようにそのプロパティに書き戻しますか? –
対象を更新するコードサンプルを更新しました。 BindingがTwoWayであることを確認し、セッターを提供するだけです。 –