11

これは、XAMLベースのアプリ(WPF / Silverlight / WinRT)で一般的な状況です。

WPF関連のリンク-> WPFデータバインディング:「親」データコンテキストにアクセスするにはどうすればよいですか?

RelativeSourceAncestorTypeMode=FindAncestor通常はWPFで救助に来ます。

これらは両方ともWinRTAPIにはありません。親にアクセスする方法(すぐにではない場合があります)DataContext、?

(私は知ってTemplateBindingElementBindingますが、どちらもDataTemplateではほとんど適していません)。

4

3 に答える 3

20

私はちょうど同じ問題を抱えていました。おそらくこれは一般的ですか?

これが機能する大まかな解決策です:

  • トップレベル要素のTagプロパティをDataContextにバインドします

    <Grid Name="gridTop" Tag="{Binding}" />
    
  • ネストされた要素のElementNameを介して必要なプロパティをバインドします。

    {Binding Tag.SomeProp, ElementName=gridTop}
    
于 2013-03-14T20:19:46.327 に答える
1

ElementNameバインディングは引き続き可能であり、あなたの場合は機能する可能性があります。それ以外の場合は、アタッチされた動作を実装する必要があります。

于 2013-03-12T18:59:53.930 に答える
0

この問題に対処する方法はいくつかあります。

Filipが指摘したように、ElementNameバインディングは最も一般的なアプローチです。

親が見つかるまでビジュアルツリーを歩くことができます。これがFindAcestorが内部で行うことです。簡単に再利用できるように、動作を整えることができます。

ビューモデルを使用する場合は、バインディングの代わりにメッセージを使用するか、各子ビューモデルに親コンテキストを追加できます。

最適なソリューションの選択は、特定の状況によって異なります。

于 2013-03-12T19:50:14.560 に答える