2010-09-15 37 views
2

我不能相信我無法找到一個答案......刷新CollectionViewSource(實體框架)綁定控件

  1. 我創建實體框架模型(的SQL Server CE)
  2. 我拖着從數據源實體到我的主窗口,自動地創建此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(); 

這一切工作,除了我需要更新數據網格。我能找到這樣做的唯一方法是重新使用造成了一些AUTOMAGIC代碼時,我綁定的實體到DataGrid:

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()不起作用。

回答

1

你試過了嗎?

CollectionViewSource.GetDefaultView(datagrid.ItemsSource).Refresh();