2011-03-18 189 views
3

我嘗試了幾種不同的方式來獲得一個簡單的DataTemplate示例工作。但是,我沒有任何運氣。下面的XAML的數據上下文在代碼隱藏中設置。這裏包含的兩個代碼示例包含在我的應用程序中的元素中,但這是唯一的外部考慮。第一個代碼示例有效。它顯示數據。但是,如果我將功能放在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

ItemSource應該是一個集合同時DataSheet.Item看起來像一個單一的項目。 你應該把它包裝到集合中。

或者你可以手動添加ListBoxItem。

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

這工作。謝謝!我還必須將DataTemplate更改爲ControlTemplate,但其他部分保持不變。它是一個開始。現在我可以在此基礎上添加更復雜的內容。我懷疑這個問題可能是Collection和Item,但是我沒有完全弄清楚。再次感謝。 – rogdawg 2011-03-18 20:26:37

+0

我已經更新了我的答案。現在它完全正常工作。 – 2011-03-18 20:36:04

-1

試試這個:

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

這裏有一個link更多信息

+0

我試過了,它沒有效果。謝謝你的幫助。我將上面的答案標記爲「答案」。不過,再次感謝。 – rogdawg 2011-03-18 20:27:13

+0

您的代碼與他的實際效果完全相同。他們都在StaticResourceExtension上設置了ResourceKey屬性。你的鏈接在底部說明了這一點:-) – CodeNaked 2011-03-18 20:27:18

0

從您提供的工作代碼中,我假設DataSheet.Item不是IEnumerable。 如果它不是IEnumerable將它綁定到ListBox.ItemsSource似乎不合適。

+0

感謝您指出這一點。這是我錯過的一個重要區別。如果Item是IEnumerable(我沒有嘗試過),我懷疑一切都會奏效。我會堅持單個對象,因爲在這種情況下,這在邏輯上更合適。但是你的評論讓我更加清楚,當我執行其他頁面/表單時,我會記住它。再次感謝。 – rogdawg 2011-03-21 12:55:03

相關問題