我有一个绑定到Collection的数据网格。 我现在想要的是,用户可以编辑元素。 因此他可以编辑单元格的内容。 现在我需要做些什么来更新集合元素,以便更改单元格编辑?
我捕获了RowEditFinished事件,因此我可以访问DataGrid的行和常规,但是如何找到已编辑单元格的内容以及它属于哪个元素?
答案 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正在相应更新。