如何在C#/ WPF中刷新DataGrid?

时间:2013-11-11 11:40:36

标签: c# wpf xaml datagrid refresh

private void cmbEmployee_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string employee = (e.AddedItems[0] as ComboBoxItem).Content as string;

    dgFake.ItemsSource = newdal2.SelectUser(employee).Tables[0].DefaultView;
}

当从组合框中单击此员工时,此方法会填充特定员工在我的WPF窗体上的数据网格,但是,当我在第一个员工之后单击另一个员工时,它不刷新数据网格,而是将员工的数据添加到第一个下面。

如何刷新或删除数据网格中的项目,请记住这是在WPF Xaml Windows窗体上,而不是DataGridView。我已经尝试了这些,但没有一个有效:

dgFake.Items.Refresh();
dgFake.Items.Remove(); //Required a remove item passed to the method, so too specific
dgFake.Itemssource = "";

1 个答案:

答案 0 :(得分:3)

通常使用WPF,我们操纵数据,而不是 UI元素。因此,在Binding属性的DataGrid.ItemsSource之后,我们可以简单地使用集合属性:

在XAML中:

<DataGrid ItemsSource="{Binding YourCollection}" ... />

然后在代码中:

YourCollection.Clear();

或更改项目:

YourCollection = someNewCollection;
  

为了让DataGrid在更改此类数据后自动更新,您需要实施INotifyPropertyChanged interface


更新&gt;&gt;&gt;

  

回应评论:'我已经添加了XAML代码,当您在XAML代码中谈论'YourCollection'时需要放在哪里?':

您需要在代码中创建一个Bindable集合属性;这可以是代码隐藏中的DependencyProperty,也可以是实现INotifyPropertyChanged interface的CLR属性。我们通常不在UI中显示数据库元素,而是更喜欢定义具有所需属性的对象类:

public static DependencyProperty EmployeesProperty = DependencyProperty.Register(
    "Employees", typeof(ObservableCollection<Employee>), typeof(YourUserControl));

public ObservableCollection<Employee> Employees
{
    get { return (ObservableCollection<Employee>)GetValue(EmployeesProperty); }
    set { SetValue(EmployeesProperty, value); }
}

然后在您的cmbEmployee_SelectionChanged处理程序方法中,您可以使用以下内容更新集合属性的值:

private void cmbEmployee_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Employees = new ObservableCollection<Employee>();
    string employee = (e.AddedItems[0] as ComboBoxItem).Content as string;
    foreach (DataRow row in newdal2.SelectUser(employee).Tables[0].Rows)
    {
        Employees.Add(new Employee(row.Id, row.Name, row.Whatever));
    }
    Employees = newdal2.SelectUser(employee).Tables[0].DefaultView;
}