0

我目前正在编写一个WPF应用程序,其中 myDataGrid绑定到一组对象。我需要一个在用户更改单元格时触发的事件。当我的集合中有超过 1 行/对象时,这可以正常工作。

这是我的场景:

COLUMN 1   |   COLUMN 2   |   COLUMN 3   |   COLUMN 4
test       |   test 1     |   test       |   1000

如果我在第 4 列中输入一个值,我希望能够触发一个事件并确定用户为第 4 列输入了一个值并进行其他调用/计算。使用 3.5 中的 Microsoft DataGrid,仅处理 1 行时这很困难。

这是我的代码:

private void PART_DataGrid_CurrentCellChanged(object sender, EventArgs e)
        {
            Microsoft.Windows.Controls.DataGridColumn currentColumn = (sender as Presentation.DataGrid).CurrentColumn;

            if (currentColumn == null || currentColumn.DisplayIndex != 3 || !m_isEditedFinished)
                return;

            if (m_vm.MYCommand.CanExecute(null))
            {
                if (CurrentRow != null)
                {
                    if (m_isEditedFinished)
                    {
                        m_vm.MYCommand.Execute(new EnterUserCountCommandParameters()
                        {
                            ViewModel = m_vm,
                            Item = CurrentRow
                        });

                        m_isEditedFinished = false;
                    }
                }
            }
        }

    private Boolean m_isEditedFinished = false;

    private void OnCellEditEnding(object sender, Microsoft.Windows.Controls.DataGridCellEditEndingEventArgs e)
    {
        CurrentRow = e.Row.Item;
        m_isEditedFinished = true;
    }

关于我还能做什么的任何想法?

4

1 回答 1

0

在您的 ViewModel 中,您显然暴露了一些List<SomeItem>,因为您使用它来设置数据网格中的 ItemSource。

  • SomeItem实施 INotifyPropertyCahnged
  • ViewModel监听/响应SomeItem的属性发生变化并做必要的工作

像这样的东西:

//when populating your List, before adding each SomeItem subscribe to IPropertyChanged 
var newItem = new SomeItem();//..some properties I assume
 newItem.PropertyChanged += (s,e) =>
 {
     switch(e.PropertyName)
     {
          case "Column#4Property" :
         //Do work that responds to that property changed
         break;
  }
  _myList.Add(newItem);
于 2013-06-07T18:37:41.003 回答