【发布时间】:2009-07-06 23:38:13
【问题描述】:
我有一个ListView,我用来自ObservableCollection 的项目填充。在我决定添加第二个列表视图来过滤一些项目之前,一切都运行良好。
我现在设置的是主列表视图具有ItemGroup 对象作为呈现的项目,显示的项目是项目组中的第一个。设想一个带有桶的哈希表,列表中呈现的项目是组中最新的项目。
我有一个按钮,当单击该按钮时,将显示另一个列表视图,其中包含该“桶”中的所有项目。但是,我在新列表视图中得到的只是项目的空白条目。我看到他们的项目样式背景,但单元格模板似乎是空的。
我唯一的猜测是存在引用问题,因为其中一些项目已经在另一个 ItemSource 中。
我附上了截图:
这是我的DataTemplate:
<DataTemplate x:Key="ResultListGroupViewCellTemplate">
<!--<DockPanel>-->
<Grid Width="Auto" Margin="0,5,5,5" ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Column="0">
<Image Margin="2" Source="{Binding Path=StrengthImage}"
Height="20" Width="20" HorizontalAlignment="Left" />
<TextBlock Text="{Binding Path=AddedDate}" Margin="0,3,0,0"
TextTrimming="CharacterEllipsis" VerticalAlignment="Center" FontFamily="Tahoma" FontSize="10" FontStyle="Italic" HorizontalAlignment="Left" />
</StackPanel>
</Grid>
<!--</DockPanel>-->
</DataTemplate>
这是我设置数据绑定的方式(MatchApiObject 是上述DataTemplate 中用于绑定的对象):
groupViewCollection = new ObservableCollection<MatchApiObject>(m.GroupList.OrderBy(mi => mi.AddedDate));
groupViewListView.DataContext = groupViewCollection;
还有 groupViewListView 本身:
<ListView Name="groupViewListView" Foreground="#FF333333"
ItemContainerStyle="{StaticResource ListViewMatchItemStyleNotSelected}"
SelectionMode="Single"
ItemsSource="{Binding}"
BorderThickness="0"
SelectionChanged="contactsList_SelectionChanged"
AlternationCount="2"
HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
>
<ListView.View>
<GridView x:Name="groupViewListViewGridView" AllowsColumnReorder="False">
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="GridViewColumnHeader">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn CellTemplate="{StaticResource StrengthValMatchColumnCellTemplate}" Width="0" Header="Strength" />
<GridViewColumn CellTemplate="{StaticResource DateMatchColumnCellTemplate}" Width="0" Header="Date" />
<!--<GridViewColumn CellTemplateSelector="{StaticResource myMatchListItemTemplateSelector}" Width="Auto" Header="Result" />-->
<GridViewColumn CellTemplate="{StaticResource ResultListGroupViewCellTemplate}" Width="Auto" Header="Result" />
</GridView>
</ListView.View>
</ListView>
编辑: 当我调试时,列表视图在绑定中有正确的项目(例如,CurrentItem 显示了应该用于绑定的正确对象),但由于某种原因它们没有显示出来。
【问题讨论】:
-
在多个位置以多种方式显示相同的数据没有问题。您能否就第二个 ListView 的实际模板发布或提供更多详细信息?看起来 ItemsSource 至少已被填充,因为有背景,所以问题很可能是数据绑定。
-
添加了一些代码,谢谢大家。
标签: c# wpf listview datatemplate