2011-10-24 9 views
0

私はTextBlockを含むグリッドを持っています。グリッドのDataContextはタイプList<MyClass>であり、Listの最初の要素のMyClass.MyPropertyプロパティにTextBlock.Textプロパティをバインドしたいと思います。私は次のようなものを試しました:Silverlightのリストへのデータバインド

<Grid x:Name="RootLayout"> 
    <TextBlock Text="{Binding [0].MyProperty}" /> 
</Grid> 

もちろん、それはうまくいきませんでした。これを行う正しい方法は何ですか?

編集:

私は試してみて、私の説明をより明確にするつもりです。グリッドには複数の要素があり、それぞれがリスト内の別の項目にバインドされています。項目は、GridViewまたはListBoxで実現できないカスタマイズされた方法でレイアウトされます。グリッド内の項目の1つはTextBlockです。そのTextプロパティをリストの最初の要素のプロパティにバインドしたいと思います。それを行う方法が分かれば、その知識を拡張して、グリッド内の他の要素にバインディングを追加することができます。

編集2:

は、判明私のコードは、Silverlightでうまく動作します。私のプロジェクトは実際にはWinRTプロジェクトですが、データバインディングは同じように動作するはずなので、Silverlightとしてタグ付けすると、より迅速な回答が得られるはずです。私はこれがWinRTのバグであると仮定していますので、私はちょうどそれのための回避策:(

+0

最初の質問:すべてのアイテムを表示するか、最初の質問のみを表示しますか?すべてのアイテムが必要な場合は、ListまたはDataGrid、または複数のアイテムをサポートする他のコンテナ(ItemsSourceプロパティなど)が必要です。 –

+0

@HiTech Magicすべてのアイテムが必要です。しかし、私が必要とするレイアウトはListBoxやDataGridではうまく動作しません。また、グリッド内の個々のアイテムごとにアニメーションを追加するので、さらに複雑になります。 –

+0

もう一度読んで、私はあなたがここで何をしようとしているのかを明確に把握しているとは思えません。リスト内のすべての項目が必要ですが、リスト内の最初の項目のプロパティにのみTextBoxをバインドする必要があります。グリッド内の他のコントロールはリスト内の他の項目にバインドしますか?リストを反復処理し、リスト内の各項目のTextBoxにMyPropertyが表示されるようにするコントロールがありますか? – Zannjaminderson

答えて

0

私はあなたがこれをやりたい理由を得ることはできませんが、あなたは次のようにリストから項目から返すプロパティを作成することができます:

public string MyBindingProperty 
{ 
    get { return MyList != null && MyList.Count > 0 ? MyList[0].MyProperty : "Error Text"; } 
} 

次にあなたがMyBindingPropertyにバインドしたい:

<TextBlock Text="{Binding MyBindingProperty}" /> 

EDIT

私はあなたがアイテムで得ることができないと言っに間違っていましたリストに - 私の悪い。バインディングは次のようになります。

<TextBlock Text="{Binding [0].MyProperty}" /> 

私が必要な場合は、私の謙虚なパイを楽しんでいます。

+0

それは、DataContextを使用する目的を敗北させるだろう:)どちらの方法でも、TextBlockはデータコンテキストとしてListに依存する唯一の要素ではないので、各バインディングに対して追加のプロパティを定義する必要があるのは面倒です。 –

+0

目的を破ると言ったら、私はあなたに従いませんか? – Zannjaminderson

+0

データコンテキストはデータソースとして動作するはずです。プロキシプロパティを追加するだけで、データコンテキストをリストからそのリストを保持するコンテナに変更することによって回避できる余分なオーバーヘッドが追加されます。しかし、コードビーディングを修正せずにこれを達成できるかどうかを確認したいと思います。 –

0

私はSLの専門家ではない午前を見つける必要があるでしょうが、私はあなたが間違っGridオブジェクトを使用していると思う。DataGridてみてくださいこのように:Defining Silverlight DataGrid Columns at Runtime

編集:

<data:DataGrid x:Name="targetDataGrid"> 
    <data:DataGrid.Columns> 
     <data:DataGridTextColumn Header="MyProperty" 
      Binding="{Binding MyProperty}" /> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

また、より多くの詳細についてはこちらをご覧ください、この道を行く:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <TextBlock Grid.Column="0" Text="{Binding MyProperty}" /> 
</Grid> 

が見つかりました:http://msdn.microsoft.com/en-us/library/cc278072%28v=VS.95%29.aspxスクロールdonwの記事...

+0

残念ながら、例を簡潔にするために省略した他の制限のため、DataGridやListBoxを使用することはできません。 –

関連する問題