我是WPF的新手。现在,我正在编写一个带有Entity Framework的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); }
}
答案 0 :(得分: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。
答案 1 :(得分:-1)
假设您正在使用通用List,您需要更改绑定中的UpdateSourceTrigger,并绑定特定元素(示例listUser)
在您的DataGrid中,更改:
ItemsSource="{Binding}"
要:
ItemsSource="{Binding listUser, UpdateSourceTrigger=PropertyChanged}"
然后在你的代码中,实现INotifyPropertyChanged,然后执行
OnPropertyChanged("listUser");
属性变更来源:http://msdn.microsoft.com/en-us/library/ms743695.aspx