我有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
。
感谢您的帮助。
答案 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。