仅在单元格上更改CurrentCellChanged

时间:2013-06-07 15:50:46

标签: c# wpf wpfdatagrid

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

以下是我的情景:

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;
    }

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

1 个答案:

答案 0 :(得分: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);