2011-12-05 8 views
0

愚かな気分は気にしません。データ階層の3つのレベルをバインドする

ビューモデルでObservableCollectionにバインドしようとしています。データ階層は次のようになります。親 - 子オブジェクトのリストを含みます。複雑ではありません。私はビューモデルへのリンクを確立し、私のXAMLツリーの最も外側のグリッドで

<Grid DataContext="{StaticResource src}"> 

はい、SRCは、問題のテキストボックスは正常に動作する前にビューモデルと2ダースのバインディングを参照しません。私のXamlツリーには別のDataContextはありません。今、私は簡単なテキストボックスに来ます。テキストボックスのテキストをchild.propertyにバインドしたい

これは動作します:

<TextBlock 
    DataContext="{Binding Parent}" 
    Text="{Binding Path=Child.Property}" 
    Style="{StaticResource headerMajor}" 
    /> 

これは動作しません:

<TextBlock 
    Text="{Binding Source=Parent,Path=Child.Property}" 
    Style="{StaticResource headerMajor}" 
    /> 

私は、彼らが同じことを言って二つの方法だと思っていました。通常、私はしばらくは疑問に思って、コーディングを続けます。しかし、私が読んだアドバイスの中には、Xamlコントロールに埋め込まれたDataContext属性がバグを見つけるのを困難にする可能性があることが説明されています。

理由と理由を説明してください。これはバインディング全体の話題を私が把握するのに役立ちます。ジム・

+0

[編集ヘルプ](http://stackoverflow.com/editing-help#code)をご覧ください。 –

答えて

1

Source

バインディングのソースとして使用objectを保持しているプロパティです、それが財産に解決されません。したがって、あなたのバインディングは文字列"Parent"のプロパティパスChild.Propertyを探していますか?その問題を参照してください。

+0

だから今は混乱している。私はその文が意味することを理解したと思った。私が指定したSourceは、子オブジェクトを含むオブジェクトです。私は明らかにそれをまだ得ていない。このプロジェクトでは、Source =バインディングの一部を使用しようとする試みはすべて失敗しました。もう一度、Source =:view modelとして指定する必要があることを説明してください。親?子供?答えがビューモデルの場合、どのようにして子供に繋がりますか? – JimBoone

+0

@ user858233: 'Source'は非常に少数の場合にのみ使用してください。リンク先のドキュメントを実際に読んでください。その主な使用例は' StaticResource'マークアップ拡張を使ってリソースとして指定されたオブジェクトにバインドされます。 'Source = {StaticResource ColorResource}'です。ここでは、バインディングを 'Parent.Child.Property'というパスのみを使用するように変更することができます(これは、' Property'と同じであるはずですが、少し無意味ですが)。 –

+0

@ user858233:バインディングパスは常にソースに対して相対的です。ソースが 'Source'、' RelativeSource'、 'ElementName'のいずれかを選択するか、なしを指定します。 –

関連する問題