Не могу поверить, что не могу найти ответ на этот вопрос ...
- Я создал модели Entity Framework, сгенерированные из БД (SQL Server CE)
Я перетащил сущность из источников данных в свое главное окно, автоматически создавая этот XAML:
<Window.Resources>
<CollectionViewSource x:Key="contentItemsViewSource" d:DesignSource="{d:DesignInstance my:ContentItem, CreateList=True}" />
</Window.Resources>
<Grid DataContext="{StaticResource contentItemsViewSource}">
<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Height="Auto" HorizontalAlignment="Stretch" ItemsSource="{Binding}" Margin="0,22" Name="contentItemsDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Stretch" Width="Auto" DataContext="{Binding}" IsReadOnly="True" CanUserResizeRows="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="idColumn" Binding="{Binding Path=Id}" Header="Id" Width="SizeToHeader" Visibility="Hidden" />
<DataGridTextColumn x:Name="filePathColumn" Binding="{Binding Path=FilePath}" Header="File Path" Width="SizeToCells" />
<DataGridTextColumn x:Name="fileSizeColumn" Binding="{Binding Path=FileSize}" Header="File Size" Width="SizeToHeader" />
</DataGrid.Columns>
</DataGrid>
</Grid>
(извините за форматирование XML, кнопка кода не работает с ним).
Я загружаю данные с этим кодом:
foreach (String file in files.FileNames)
{
ContentItem c = new ContentItem() { Id = Guid.NewGuid(), FilePath = file, FileSize = (Int32)finfo.Length };
db.AddToContentItems(c);
}
db.SaveChanges();
Это все работает, за исключением того, что мне нужно обновить сетку данных. Единственный способ найти для этого способ - это повторно использовать некоторый автоматический код, созданный, когда я связал сущность с сеткой данных:
System.Windows.Data.CollectionViewSource contentItemsViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("contentItemsViewSource")));
System.Data.Objects.ObjectQuery<SwordfishWPF.ContentItem> contentItemsQuery = this.GetContentItemsQuery(db);
contentItemsViewSource.Source = contentItemsQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
Конечно, есть более простой способ? datagrid.Items.Refresh()
не работает.