我是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>
我不明白为什么他们看起来/工作不一样 - 绑定它时不应该填充完全相同的代码吗?我需要做些什么来使其发挥作用?
答案 0 :(得分:2)
问题在于您创建datatemplate的方式。请记住,ListViewItem是添加到需要在列表中显示的任何对象的包装器,因此当您创建包含listviewitem的datatemplate时,您基本上将对象包装两次。您需要做的就是从datatemplate中删除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>