0

我是 WinRT 的新手,如果这是一个愚蠢的问题,我深表歉意。我创建了以下 ListView:

<ListView x:Name="MyListView1" 
        Grid.Row="1" 
        Margin="120,300,0,0" 
        Width="500" 
        HorizontalAlignment="Left">

    <ListViewItem Background="DodgerBlue">

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="300" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="hardcoded value 1" Grid.Column="0"></TextBlock>
            <TextBlock Text="hardcoded value 2" Grid.Column="1"></TextBlock>

        </Grid>

    </ListViewItem>
</ListView>

这看起来是我想要的样子,如果您单击一个项目,它将选择整行。但是,如果我将它移到 DataTemplate 中,它看起来就不一样了,您不能再单击整行。(如果我添加一个目标类型为 ListViewItem 的 ItemContainerStyle 并将背景设置为黄色,它将填充它,因此它与硬编码的 ListItem 大小相同,但您只能单击黄色轮廓来选择它。)这是代码:

<ListView x:Name="MyListView2" 
        ItemTemplate="{StaticResource MyTemplate}" 
        ItemsSource="{Binding MyData}"
        Grid.Row="1" 
        Margin="120,0,0,0" 
        Width="500" 
        HorizontalAlignment="Left">

</ListView>

在 StandardStyles.xaml 中:

<DataTemplate x:Key="MyTemplate">

    <ListViewItem Background="DodgerBlue">

        <Grid>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="300" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="{Binding MyDataOne}" Grid.Column="0"></TextBlock>
            <TextBlock Text="{Binding MyDataTwo}" Grid.Column="1"></TextBlock>

        </Grid>

    </ListViewItem>
</DataTemplate>

我不明白为什么它们看起来/工作不一样-绑定时不应该填充完全相同的代码吗?我需要做什么才能使其工作?

4

1 回答 1

2

问题在于您创建数据模板的方式。请记住,ListViewItem 是添加到需要在列表中显示的任何对象的包装器,因此当您创建包含 listviewitem 的数据模板时,您基本上是将该对象包装两次。您需要做的就是从数据模板中删除 listviewitem 元素

<DataTemplate x:Key="MyTemplate">

    <Grid Background="DodgerBlue">

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="300" />
        </Grid.ColumnDefinitions>

        <TextBlock Text="{Binding MyDataOne}" Grid.Column="0"></TextBlock>
        <TextBlock Text="{Binding MyDataTwo}" Grid.Column="1"></TextBlock>

    </Grid></DataTemplate>
于 2013-07-12T11:53:27.883 回答