我正在编写一个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;
}
关于我还能做什么的任何想法?
答案 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);