如何在编辑项目时刷新DataGrid

时间:2015-10-14 16:18:23

标签: wpf entity-framework datagrid

我有一个绑定到viewsource的DataGrid,如下所示:

   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的行位置。

1 个答案:

答案 0 :(得分:0)

这是我要做的。

你需要一个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>

并将XAML中的DataGrid项目源设置为我们的ViewSource

ItemsSource="{Binding CustomerViewSource}

现在,当您填充网格或表单加载时,在您的代码中,您将会这样。这将填充列表并更新网格。现在无论何时将List添加到其他内容中,网格都会刷新。

CustomerView.GetCustomers();