マークアップ拡張を書いています。私はこのようなXAMLを持っています現在のバインディング値
<TextBlock Text="{ui:Test SomeInfo}" />
そして1つの文字列引数を取るコンストラクタを持つTestExtensionがあります。私は "SomeInfo"文字列を得て、すべてが見つかるようにします。今度は拡張子をネストして、
<TextBlock Text="{ui:Test {Binding PropName}}" />
のように書いて、そのまま動作させたいと思います。 System.Windows.Data.Binding型の引数を1つ取るコンストラクタを追加する必要がありました。
は今、私はBindingオブジェクトから現在の値を取得する必要がありますどのように
- を知っておく必要がありますか?
- いつすればよいですか?私は何らかの方法で変更を購読するか、ProvideValueメソッドで毎回その値を尋ねるべきですか?
アップデート1 PROPNAMEはのTextBlockのDataContextのに対して解決されなければなりません。
アップデート2ちょうど関連する質問が見つかりました:あなたのMarkupExtension
は何DataContext
を持っていないし、それがビジュアルツリーに表示されていないと私はあなたがバインディングと対話することになっているとは思わないので、このようなHow do I resolve the value of a databinding?
実際、TextblockのDataContextを使用したいと思います。 – adontz
@adontz:私が言ったように、普通のBindingをコンバーターで使う方が良いかもしれません。あなた自身のMarkupExtensionの中のバインディングをうまく使うのは苦痛です。 –
マークアップユーザーに私にとって重要なより一貫した構文を提供するので、私はこの痛みを受け入れます。 – adontz