Для моего первого приложения Silverlight я написал программу, которая отправляет предоставленные пользователем строки поиска в Flickr REST API и отображает результаты в 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()
, который обновляет свойство Source
элемента Image
с BitmapImage
, полученным из URI фотографии Flickr, и устанавливает видимость изображения на Visible
. Нажатие на изображение, таким образом раскрытое, скрывает его снова. Все это было легко реализовать и отлично работает.
Но всякий раз, когда я щелкаю один из заголовков столбцов для сортировки по этому столбцу, ячейки, которые я обновил таким образом, не меняются. Остальная часть DataGrid
восстанавливается и обновляется соответствующим образом, но эти ячейки остаются позади, отделенными от остальной части их ряда. Это очень странно и совсем не то, что я хочу.
Что я делаю не так? Должен ли я как-то освежить DataGrid
в ответ на событие сортировки, и если да, то как? Или, если я не собираюсь напрямую связываться с содержимым таблицы, как правильно получить желаемое поведение?