Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 编辑项时如何刷新数据网格_Wpf_Entity Framework_Datagrid - Fatal编程技术网

Wpf 编辑项时如何刷新数据网格

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

我将DataGrid绑定到viewsource,如下所示:

   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();