2011-03-18 105 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

相关问题