我似乎无法让DataTemplate在WPF中工作

时间:2011-03-18 19:58:12

标签: wpf datatemplate

我尝试了几种不同的方法来使一个简单的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>

我真的很感激任何关于我做错的建议。

感谢。

3 个答案:

答案 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以获取更多信息