【问题标题】:How to edit individual cells in a Data Grid in code-behind如何在代码隐藏中编辑数据网格中的单个单元格
【发布时间】:2013-11-27 23:54:56
【问题描述】:

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

数据模型:

这是绑定到DataGrid 的ObservableCollection 的实现。

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 执行此操作。我是否只需替换包含单元格的行并添加正在更改的数据?我真的只是不确定如何使用由ObservableCollection 创建的DataGrid。

感谢您的帮助。

【问题讨论】:

  • 如果你编辑你的 observable 集合中的项目,你在某种意义上是不是 editing individual cells?
  • 您不会在 WPF 中“编辑 UI”。如果你想修改你的数据,然后修改你的数据。
  • @HighCore 我知道。我只是不确定如何修改数据。

标签: c# wpf mvvm datagrid observablecollection


【解决方案1】:

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

您的类 IoData 需要实现 INotifyPropertyChanged,因此当进行更改时,您的属性将在 UI(视图)上更新。

【讨论】:

  • 我认为这是我已经知道的事情,如果我的表现有所不同,我很抱歉。我想我只需要知道我将如何编辑 _input1 例如(我不确定如何定位和更改集合中的该项目)。
  • 假设你想得到一个符合某些条件的特定的?使用 LINQ: var ioItem = IOCollection.FirstOrDefault(io => io.rowNum == 1); ioItem.input = "新输入";
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2017-10-23
    • 2013-09-11
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多