2013-03-11 3 views
3

Я новичок в WPF. Теперь я пишу проект WPF с Entity Framework. Я могу добавлять и удалять элементы правильно на моем wpf; однако, после добавления или удаления элементов, мой datagrid все еще не обновлялся. Даже я использую ssEntities.SaveChanges(); ssEntities.Refresh(RefreshMode.StoreWins, ssEntities.User);WPF datagrid не обновляет автоматически Entity Framework

Как я могу обновить свой 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 и код. –

+0

@HighCore Вот мой datagrid XAML и моя кнопка сохранения, спасибо. – CYB

+0

1 - Я не вижу, где установлен ваш DataContext. 2 - Я не думаю, что это хорошая идея, чтобы полностью сменить пользовательский интерфейс и доступ к БД, вам лучше создать промежуточный объектный слой для хранения данных, которые должны отображаться в пользовательском интерфейсе. Для этого вам понадобится 'ObservableCollection'. Пожалуйста, не помещайте код доступа DB в обработчик события Click Button. –

ответ

-1

Предполагая, что вы используете общий список, что нужно изменить UpdateSourceTrigger в связывании и привязать конкретный элемент (например, listUser)

В вашей DataGrid, изменение:

ItemsSource="{Binding}" 

To:

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

Затем в коде позади, реализовать INotifyPropertyChanged и выполнить

OnPropertyChanged("listUser"); 

Источник для недвижимости изменилась: http://msdn.microsoft.com/en-us/library/ms743695.aspx

+0

Извините, но это не решит проблему OP. Откуда у вас был listUser? Я не заметил этого в коде. – failedprogramming

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, так что ими можно манипулировать для пользовательского интерфейса. Когда вы нажимаете кнопку, она создает пользователя, добавляет его в ObservableCollection и ObjectContext, а затем сохраняет изменения. Идентификатор, созданный для записи, будет заполнен при сохранении изменений.

Смежные вопросы