2013-03-11 55 views
3

我是WPF中的新成員。現在,我正在用Entity Framework編寫一個WPF項目。我可以在我的wpf上正確添加和刪除項目;但是,在添加或刪除項目後,我的數據網格仍未刷新。即使我使用ssEntities.SaveChanges(); ssEntities.Refresh(RefreshMode.StoreWins, ssEntities.User);WPF datagrid不會自動刷新實體框架

如何使用刷新函數或其他函數自動刷新我的數據網格?

XAML

<Window.Resources> 
    <CollectionViewSource x:Key="UserViewSource" 
          d:DesignSource="{d:DesignInstance my:User, CreateList=True}" /> 
</Window.Resources> 
<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Height="537" 
      HorizontalAlignment="Left" ItemsSource="{Binding}" Margin="12,12,0,0" 
      Name="UserDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" 
      VerticalAlignment="Top" Width="300" 
      SelectedCellsChanged="UserDataGrid_SelectedCellsChanged"> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="IDColumn" Binding="{Binding Path=ID}" Header="ID" 
          Width="80" IsReadOnly="True" /> 
     <DataGridTextColumn x:Name="NameColumn" Binding="{Binding Path=Name}" 
          Header="Name" Width="80" IsReadOnly="True" /> 
    </DataGrid.Columns> 
</DataGrid> 

CS

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     if (ActionHandler == "Add") 
     { 
      User user = new User(); 
      user.ID = ID; 
      user.Name = Name; 

      ssEntities.User.AddObject(user); 
     } 

     ssEntities.SaveChanges(); 
     ssEntities.Refresh(RefreshMode.StoreWins, ssEntities.User); 
    } 
    catch (Exception ex) 
    { MessageBox.Show(ex.Message); } 
} 
+1

發佈您的XAML和代碼。 – 2013-03-11 03:19:44

+0

@HighCore這是我的datagrid XAML和我的保存按鈕,謝謝。 – CYB 2013-03-11 03:32:47

+0

1 - 我沒有看到你的'DataContext'設置在哪裏。 2 - 我認爲不要將這樣的UI和數據庫訪問混爲一談,你最好創建一箇中間對象層來保存數據,以便在UI中顯示。你需要'ObservableCollection's。請不要將DB訪問代碼放在Button單擊事件處理程序中。 – 2013-03-11 03:34:48

回答

-1

假設您使用您需要改變UpdateSourceTrigger在結合和結合特定元件的通用列表(例如LISTUSER)在您的DataGrid中,更改:

ItemsSource="{Binding}" 

要:

ItemsSource="{Binding listUser, UpdateSourceTrigger=PropertyChanged}" 

然後在後面的代碼,執行INotifyPropertyChanged,並執行

OnPropertyChanged("listUser"); 

來源爲改變性質:http://msdn.microsoft.com/en-us/library/ms743695.aspx

+0

對不起,但這不能解決OP的問題。無論如何,你從哪裏得到listUser?我沒有注意到在提供的代碼中。 – failedprogramming 2013-03-11 04:57:15

0

我會與其他人同意誰在另一個答案中評論說,你真的應該採用MVVM的東西這個。

這就是說,你上面說過你的DataContext是StudyEntities ssEntities;。那是你的ObjectContext嗎?它看起來像是被用作一個。我通常不使用CollectionViewSource,除非我需要對大數據集進行自定義過濾和/或排序。否則,我只是使用ObservableCollection。

像這樣的東西應該足夠了:

private ObservableCollection<User> MyUsers { get; set; } 
private StudyEntities ssEntities; 

public MyMainWindow() 
{ 
    ssEntities = new StudyEntities(); 
    MyUsers = new ObservableCollection<User>(ssEntities.Users.ToList()); 
} 

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    //Code for creating the User isntance MyUser 
    MyUsers.Add(MyUser); 
    ssEntities.Users.Add(MyUser); 
    ssEntities.SaveChanges(); 
} 

你的實體被放置在一個ObservableCollection,使他們能夠對UI進行操作。當您單擊該按鈕時,它會創建一個用戶,將其添加到ObservableCollection和ObjectContext中,然後保存更改。爲記錄生成的ID將在保存更改時填充。