WPF DataGrid保存编辑

时间:2014-06-09 16:05:21

标签: c# wpf datagrid

我有一个绑定到Collection的数据网格。 我现在想要的是,用户可以编辑元素。 因此他可以编辑单元格的内容。 现在我需要做些什么来更新集合元素,以便更改单元格编辑?

我捕获了RowEditFinished事件,因此我可以访问DataGrid的行和常规,但是如何找到已编辑单元格的内容以及它属于哪个元素?

1 个答案:

答案 0 :(得分:1)

您需要实施INotifyPropertyChanged:

如果实现INotifyPropertyChanged接口的对象在属性发生变化时会引发属性更改事件。这是一个示例,演示了与实现INotifyPropertyChanged的对象和普通DependencyProperty的数据绑定。

在项目中创建一个名为Customer的类,并实现INotifyPropertyChanged。

public class Customer : INotifyPropertyChanged
{
Define INotifyPropertyChanged Members,
public event PropertyChangedEventHandler PropertyChanged;

public void OnPropertyChanged(PropertyChangedEventArgs e)
{
   if (PropertyChanged != null)
   {
     PropertyChanged(this, e);
   }
}

在属性setter中通过传递属性名称来调用OnPropertyChanged,如

private string _Name;

public string Name
{
  get
  {
     return _Name;
  }
  set
  {
    _Name = value;
    OnPropertyChanged(new PropertyChangedEventArgs("Name"));
  }
}

在MainPage.xaml.cs中添加一个客户对象的ObservableCollection作为依赖项 属性以确保在我们分配该客户列表时UI正在更新 到另一个列表或对象。如果我们将它作为普通属性,UI将仅在更新时更新 我们将新对象添加到客户列表中,或者对基础属性进行任何更改。

public ObservableCollection<Customer> CustomerList
{
  get { return (ObservableCollection<Customer>)
GetValue(CustomerListProperty); }
  set { SetValue(CustomerListProperty, value); }
}

// Using a DependencyProperty as the backing store for MyProperty.
//This enables animation, styling, binding, etc...

public static readonly DependencyProperty CustomerListProperty =
DependencyProperty.Register("CustomerList",
typeof(ObservableCollection<Customer>), typeof(MainPage),
    new PropertyMetadata(new ObservableCollection<Customer>()));

我还在MainPage.xaml.cs中添加了一个DependencyProperty FirstName,只是为了显示一个简单的DependencyProperty的绑定。

public string FirstName
{
  get { return (string)GetValue(FirstNameProperty); }
  set { SetValue(FirstNameProperty, value); }
}

// Using a DependencyProperty as the backing store for MyProperty.
//This enables animation, styling, binding, etc...

public static readonly DependencyProperty FirstNameProperty =
  DependencyProperty.Register("FirstName", typeof(string), typeof(MainPage),
  new PropertyMetadata(string.Empty)); 

在MainPage.XAML中添加一个datagrid和textbox,并将它分别绑定到ObservableCollection和DependencyProperty。

<DataGrid Name="dgUsers" AutoGenerateColumns="false">
                        <DataGrid.Columns  ItemsSource="{Binding ElementName=TestUC,
                                    Path=CustomerList}">

                                <DataGridTextColumn Header="Name" Binding="{Binding Name}" />

                                <DataGridTemplateColumn Header="Like">
                                        <DataGridTemplateColumn.CellTemplate>
                                                <DataTemplate>
                                                        <Button Content="{Binding Like}" BorderThickness="0" />
                                                </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

                        </DataGrid.Columns>
                </DataGrid>
<TextBox x:Name="NameTextBox"
Text="{Binding ElementName=TestUC, Path=FirstName, Mode=TwoWay}"
Width="100"
Height="25"
Margin="0,10,0,10" />

为了解PropertyChanged事件,我添加了一个按钮,只是更新click事件中的customer对象,以便您可以在datagrid中看到更改。当您从Click事件更改Customer对象的属性时,您可以看到UI正在相应更新。