2011-03-18 6 views
3

単純なDataTemplateの例を得るためにいくつかの方法を試しました。しかし、私は運がない。以下のXAMLのデータコンテキストがコードビハインドに設定されています。ここに含まれている2つのコード例は、私のアプリケーションで要素にラップされていますが、これは外部の唯一の考慮事項です。最初のコード例が動作します。データを表示します。しかし、DataTemplateにその機能を置き、テンプレートを使用しようとすると、機能しません。DataTemplateをWPFで動作させるように見えない

実施例:動作しません(ただし、エラーがスローされません)

<Canvas Height="100" Width="300"> 
     <TextBlock Text="{Binding Path=DataSheet.Item.ClassId}" Canvas.Left="10"></TextBlock> 
     <TextBlock Text="{Binding Path=DataSheet.Item.ClassName}" Canvas.Right="100"></TextBlock> 
    </Canvas> 

例:私が間違っているのものになど

<Window.Resources> 
    <DataTemplate x:Key="FirstTemplate"> 
     <Grid Margin="4"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" SharedSizeGroup="Key" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <TextBox Text="{Binding ClassId}"></TextBox> 
      <TextBox Text="{Binding ClassName}"></TextBox> 
     </Grid> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True" 
      HorizontalAlignment="Stretch" 
      ItemTemplate="{StaticResource ResourceKey=FirstTemplate}"/> 
</Grid> 

に何かアドバイスは本当にいただければ幸いです。

ありがとうございました。

答えて

4

だが、単一のアイテムのように見えます。 コレクションにまとめてください。

また、手動でListBoxItemを追加することもできます。

<ListBox> 
    <ListBoxItem Content="{Binding DataSheet.Item}" ContentTemplate="{StaticResource FirstTemplate}"/> 
</ListBox> 
+0

これはうまくいきました。ありがとう!私はまた、DataTemplateをControlTemplateに変更しなければならなかったが、それ以外はすべて同じままだった。それは始まりです。今私はこの上に構築し、より複雑なものを追加することができます。私は問題がコレクション対アイテムであるかもしれないと思ったが、私はそれを正しく得ていなかった。再度、感謝します。 – rogdawg

+0

私は自分の答えを更新しました。今は完全に機能しています。 –

-1

この試してみてください:あなたのItemSourceはその間DataSheet.Item収集する必要があります

<ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True" 
      HorizontalAlignment="Stretch" 
      ItemTemplate="{StaticResource FirstTemplate}"/> 

はここで詳細はlink

+0

これを試しても効果はありませんでした。ご協力いただきありがとうございます。私は上記の答えを「The」の答えとしました。しかし、もう一度ありがとう。 – rogdawg

+0

あなたのコードは効果的に彼と同じです。彼らは両方ともStaticResourceExtensionのResourceKeyプロパティを設定します。あなたのリンクは、底に多くのことを言っています:-) – CodeNaked

0

あなたが提示した作業コードから、DataSheet.ItemがIEnumerableではないと仮定しています。 ListBox.ItemsSourceにバインドするIEnumerableが適切ではないようです。

+0

これを指摘してくれてありがとう。私が逃したのは重要な違いです。アイテムがIEnumerable(私はそれを試していない)だった場合、すべてがうまくいくと思う。この場合、論理的にはより適切なので、私は単一のオブジェクトに固執します。しかし、あなたのご意見は私には明らかになっており、私は他のページやフォームを実装する際にそれを念頭に置いていきます。再度、感謝します。 – rogdawg

関連する問題