3

我是 WPF 的新手。现在,我正在使用实体框架编写 WPF 项目。我可以在我的 wpf 上正确添加和删除项目;但是,在我添加或删除项目后,我的数据网格仍然没有刷新。即使我使用ssEntities.SaveChanges(); ssEntities.Refresh(RefreshMode.StoreWins, ssEntities.User);

如何使用刷新功能或其他功能自动刷新我的数据网格?

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); }
 }
4

2 回答 2

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 将在保存更改时填充。

于 2013-05-23T14:00:23.210 回答
-1

假设您使用的是通用列表,您需要更改绑定中的 UpdateSourceTrigger,并绑定特定元素(示例 listUser)

在您的 DataGrid 中,更改:

ItemsSource="{Binding}" 

至:

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

然后在你后面的代码中,实现 INotifyPropertyChanged,然后执行

OnPropertyChanged("listUser");

属性来源已更改:http: //msdn.microsoft.com/en-us/library/ms743695.aspx

于 2013-03-11T04:20:29.303 回答