2012-05-02 9 views
1

SilverlightアプリケーションをMetroに移植しようとしていますが、{Binding PropertyName, RelativeSource={RelativeSource TemplatedParent}}へのバインディングをControlTemplateで設定すると、{TemplateBinding PropertyName}は機能しません。RelativeSourceへのバインドTemplatedParentはControlTemplate内では機能しません

これらはどちらもSilverlightアプリケーション内で動作しますが、RelativeSource構文を使用してMode=TwoWayの使用を許可する必要があります。

ControlTemplate内でTwoWayバインディングを使用するには、何が必要ですか?

答えて

2

独自のコントロールを構築している場合は、OnApplyTemplate()オーバーライドでGetTemplateChild()を呼び出してテンプレートパーツを定義して取得することができます。次に、バインディングに頼る代わりに手動でプロパティを更新します。既存のコントロールを再テンプレートしている場合は、最初にサブクラス化するか、バインディングを処理する付属の依存プロパティ/ behaviorsを作成します。

+0

SL5、WP7、Metroの間でコントロールロジックのコードベースを共有しようとしています。そのため、ControlTemplate内にUI関連のものを保持しようとしていました。つまり、私はOnApplyTemplateでBindingを提案して設定してみましたが、ListBox.SelectedItemPropertyへのTwoWayバインディングは機能していないようで、PropertyChangedCallbackを起動しません。たぶんこれはListBoxコントロールの問題です。 –

+0

私は、カスタムContentControlだけを含む新しいアプリケーションでこれを複製しようとしました。ふりだしに戻る! –

+0

ListBoxにSelectionChangedイベントハンドラを追加し、手動で更新することはできます。私は次の週に私がオフになっているWin8デベロッパーキャンプにこれを持ってきて、彼らが何を言わなければならないかを見てみるしかありません! –

関連する問題