2015-10-14 51 views
0

我有綁定到viewsource一個DataGrid如下:如何刷新的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

這是我會做的。

你需要一個INotify類讓Datagrid知道你的源已經改變了,這裏是我使用的。

public class CommonBase:INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

現在我會爲你的網頁一個ViewModel具有DataGrid中,這個視圖模型將有你的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} 

現在,在後面的代碼,當你填充網格或窗體加載,你會去這樣。這將填充列表並更新網格。現在,無論何時該列表被添加到或任何其他網格將刷新。

CustomerView.GetCustomers();