Wpf 编辑项时如何刷新数据网格
我将DataGrid绑定到viewsource,如下所示:Wpf 编辑项时如何刷新数据网格,wpf,entity-framework,datagrid,Wpf,Entity Framework,Datagrid,我将DataGrid绑定到viewsource,如下所示: public OrderProcessingEntities ctx = new OrderProcessingEntities(); private CollectionViewSource customerViewSource; public CustomersDataSheet() { InitializeComponent(); } private void Wi
public OrderProcessingEntities ctx = new OrderProcessingEntities();
private CollectionViewSource customerViewSource;
public CustomersDataSheet()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
customerViewSource = ((CollectionViewSource) this.FindResource("customerViewSource")));
ctx.Customers.Load();
customerViewSource.Source = ctx.Customers.Local;
}
DataGrid上的每条记录都有一个按钮,用于打开另一个表单EditForm.ShowDialog以编辑该记录
编辑表单有自己的连接,其连接方式与其父表单与DataGrid的连接方式相同
用户可以保存或取消。如果他保存,我将使用ctx.SaveChanges将更改保存到数据库Sql Server
我需要做什么,以便使用更新的数据刷新DataGrid
我可以在EditForm关闭时执行此操作,但我不希望DataGrid的行位置发生更改。以下是我将执行的操作 您需要一个INotify类来让Datagrid知道您的源代码已经更改,下面是我使用的
public class CommonBase:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
现在,我将为您的页面创建一个包含datagrid的ViewModel,该视图模型将包含您的CustomerViewSource,如下所示。我叫它CustomerView。您希望从上面创建的CommonBase类继承。可以使用CollectionViewSource或ObservableCollection
public class CustomerView: CommonBase
{
private CollectionViewSource _CustomerViewSource;
public CollectionViewSource CustomerViewSource
{
get { return _CustomerViewSource; }
set { _CustomerViewSource = value; NotifyPropertyChanged("CustomerViewSource"); }
}
public void GetCustomers()
{
CustomerView = new CollectionViewSource()
//YOUR CODE HERE TO POPULATE CustomerView
}
}
在XAML中,使用以下代码设置DataContext。ViewModels只是我的项目中CustomerView所在的文件夹
<DataGrid.DataContext>
<ViewModels:CustomerView x:Name="CustomerView"></ViewModels:CustomerView>
</DataGrid.DataContext>
现在,在您的代码中,当您填充网格或加载表单时,您将这样做。这将填充列表并更新网格。现在,每当该列表被添加到或其他内容时,网格就会刷新
CustomerView.GetCustomers();
CustomerView.GetCustomers();