如何在代码隐藏中编辑数据网格中的单个单元格

时间:2013-11-14 19:34:01

标签: c# wpf mvvm datagrid observablecollection

我有DataGrid绑定到ObservableCollection,并使用MVVM结构实现。我的问题是如何编辑C#中实现的DataGrid中的单个单元格?

数据模型:

这是ObservableCollection绑定到DataGrid的实现。

private ObservableCollection<IoData> _ioCollection;

public Data_Model()
{
    IOCollection = new ObservableCollection<IoData>();
    IOCollection.Add(new IoData() { rowNum = 0, input = _input0, output = _output0});
    IOCollection.Add(new IoData() { rowNum = 1, input = _input1, output = _output1});
    IOCollection.Add(new IoData() { rowNum = 2, input = _input2, output = _output2});
}

//**Update 1: showing my Collection's property**

public ObservableCollection<IoData> IOCollection
{
    get { return _ioCollection; }
    set
    {
        _ioCollection = value;
        NotifyPropertyChange(() => IOCollection);
    }
}

XAML:

<DataGrid ItemsSource="{Binding Data_Model.IOCollection}" ... />

我将从我的ViewModel中的Command执行此操作。我只是替换包含单元格的行并添加正在更改的数据吗?我真的只是不确定如何处理使用DataGrid创建的ObservableCollection

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

只需编辑ObservableCollection中的项目,它就会相应地更新cell

您的班级IoData需要实施INotifyPropertyChanged,因此您的属性会在进行更改时在用户界面(视图)上更新。

答案 1 :(得分:1)

假设您的数据对象(示例中的IoData)正确实现了INotifyPropertyChanged,您只需要引用感兴趣的数据对象并更新属性。更改将自动传播到您的DataGrid。

http://msdn.microsoft.com/en-us/library/ms668604(v=vs.110).aspx

编辑:要编辑数据,您可以将其作为数据[1] .input访问。您使用的索引可以很容易地附加到DataGrid的SelectedIndex属性或类似的东西。如果其他东西持有对同一IOData对象的引用(如果它是在“Add”语句之外的某处构造的),那么对该引用的任何更改也会更新DataGrid。