WPF数据网格插入和更新绑定
本文关键字:更新 绑定 插入 网格 数据 数据网 WPF | 更新日期: 2023-09-27 18:07:37
我有一个绑定到集合的DataGrid
。我希望用户能够编辑元素(插入和更新),因此他可以编辑单元格的内容。
我必须做些什么来更新集合元素,使其具有单元格编辑的更改?
我使用了RowEditFinished
事件,因此我可以访问DataGrid
的行和列,但是我怎么能发现,编辑单元格的内容是什么,它属于哪个元素?
您需要实现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正在相应地更新。