我尝试了几种不同的方法来使一个简单的DataTemplate示例工作。但是,我没有运气。下面的XAML的数据上下文正在代码隐藏中设置。这里包含的两个代码示例包含在我的应用程序的元素中,但这是唯一的外部考虑因素。第一个代码示例有效。它显示数据。但是,如果我将功能放在DataTemplate中,然后尝试使用该模板,它就不起作用。
工作示例:
<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>
我真的很感激任何关于我做错的建议。
感谢。
答案 0 :(得分:4)
您的ItemSource
应该是一个集合,而DataSheet.Item
看起来像一个项目。
你应该将它包装成集合。
或者您可以手动添加ListBoxItem。
<ListBox>
<ListBoxItem Content="{Binding DataSheet.Item}" ContentTemplate="{StaticResource FirstTemplate}"/>
</ListBox>
答案 1 :(得分:0)
从您提供的工作代码中,我假设DataSheet.Item不是IEnumerable。 如果不是IEnumerable将它绑定到ListBox.ItemsSource似乎不合适。
答案 2 :(得分:-1)
试试这个:
<ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True"
HorizontalAlignment="Stretch"
ItemTemplate="{StaticResource FirstTemplate}"/>
这是link以获取更多信息