wpf datagrid双向绑定
时间: 2023-09-12 08:03:48 浏览: 34
WPF DataGrid 双向绑定可以通过以下步骤实现:
1. 创建一个 Model 类,其中包含需要绑定到 DataGrid 的属性。
2. 在 ViewModel 中创建一个 ObservableCollection 对象,用于存储 Model 对象的集合。
3. 在 XAML 中,将 DataGrid 的 ItemsSource 属性绑定到 ViewModel 中的 ObservableCollection 对象。
4. 在 XAML 中,为 DataGrid 的列定义绑定到 Model 中的属性。
5. 在 XAML 中,将 DataGrid 的 SelectedItem 属性绑定到 ViewModel 中的 SelectedModel 属性。
6. 在 ViewModel 中,实现 INotifyPropertyChanged 接口,并在 SelectedModel 属性更改时引发 PropertyChanged 事件。
7. 在 ViewModel 中,实现 ICommand 接口,并在编辑 Model 对象时调用该命令。
以下是一个简单的示例:
Model 类:
```
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
```
ViewModel 类:
```
public class PersonViewModel : INotifyPropertyChanged
{
private ObservableCollection<Person> _people;
private Person _selectedPerson;
public ObservableCollection<Person> People
{
get { return _people; }
set
{
_people = value;
OnPropertyChanged(nameof(People));
}
}
public Person SelectedPerson
{
get { return _selectedPerson; }
set
{
_selectedPerson = value;
OnPropertyChanged(nameof(SelectedPerson));
}
}
public ICommand SaveCommand { get; }
public PersonViewModel()
{
People = new ObservableCollection<Person>
{
new Person { Name = "John", Age = 30 },
new Person { Name = "Mary", Age = 25 }
};
SaveCommand = new RelayCommand(Save);
}
private void Save()
{
// 保存 Person 对象
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
XAML:
```
<DataGrid ItemsSource="{Binding People}" SelectedItem="{Binding SelectedPerson}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name, Mode=TwoWay}"/>
<DataGridTextColumn Header="Age" Binding="{Binding Age, Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
```
在这个示例中,DataGrid 的 ItemsSource 属性绑定到 ViewModel 中的 ObservableCollection<Person> 对象,列绑定到 Model 类的属性。当用户选择 DataGrid 中的行时,SelectedPerson 属性会更新。当用户编辑行时,Model 对象的属性将更新,并在 ViewModel 中调用 Save 方法来保存更改。