对于我的第一个Silverlight应用程序,我编写了一个程序,将用户提供的搜索字符串发送到Flickr REST API并在DataGrid
中显示结果。所述网格如此定义:Silverlight DataGrid的按列排序不会更新以编程方式更改的单元格
<data:DataGrid x:Name="PhotoGrid" AutoGenerateColumns="False">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Photo Title" Binding="{Binding Title}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" IsReadOnly="True" />
<data:DataGridTemplateColumn Header="Photo" SortMemberPath="ImageUrl">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="Click here to show image" MouseLeftButtonUp="ShowPhoto"/>
<Image Visibility="Collapsed" MouseLeftButtonUp="HidePhoto"/>
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
这是一个简单的双列表。第一列包含照片的标题,第二列包含文字“点击此处显示图片”。点击此处请致电ShowPhoto()
,该服务会将Image
元素的Source
属性更新为从Flickr照片的URI导出的BitmapImage
,并将图像的可见性设置为Visible
。点击显示的图像再次隐藏。所有这些都很容易实现,并且完美地工作。
但是,无论何时点击其中一个列标题以按该列进行排序,我以这种方式更新的单元格都不会更改。 DataGrid
的其余部分被适当地更新和更新,但这些单元格保持在后面,与其他行中的单元格分离。这很奇怪,根本不是我想要的。
我在做什么错?我是否应该为了响应排序事件而更新DataGrid
,如果是这样的话?或者,如果我不应该直接搞乱网格的内容,那么获得我想要的行为的正确方法是什么?
你可以发布ShowPhoto()和HidePhoto()方法吗? – rwilliams 2010-04-21 21:34:41