WPF数据网格插入和更新绑定

本文关键字:更新 绑定 插入 网格 数据 数据网 WPF | 更新日期: 2023-09-27 18:07:37

我有一个绑定到集合的DataGrid。我希望用户能够编辑元素(插入和更新),因此他可以编辑单元格的内容。

我必须做些什么来更新集合元素,使其具有单元格编辑的更改?

我使用了RowEditFinished事件,因此我可以访问DataGrid的行和列,但是我怎么能发现,编辑单元格的内容是什么,它属于哪个元素?

WPF数据网格插入和更新绑定

您需要实现INotifyPropertyChanged:

如果一个对象实现了INotifyPropertyChanged Interface,当它的属性发生变化时,它将引发一个property changed事件。下面是一个示例,演示了与实现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);
   }
}

在属性设置器中调用OnPropertyChanged通过传递属性名称,如

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

在mainpage . example .cs中添加一个客户对象的ObservableCollection作为Dependency属性,以确保UI在我们分配客户列表时正在更新到另一个列表或对象。如果我们把它作为一个普通属性UI只会在我们将新对象添加到customerlist中,或者底层属性发生任何变化。

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

我还添加了一个DependencyProperty FirstName在mainpage . example .cs只是为了显示一个简单的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)); 

主页。XAML添加了一个数据网格和一个文本框,并分别绑定到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事件中更新客户对象,以便您可以看到数据网格中的更改。当您从click event更改Customer对象的属性时,您可以看到UI正在相应地更新。