Datagrid绑定到ObservableCollection WPF

时间:2013-10-07 18:15:18

标签: c# wpf data-binding datagrid inotifypropertychanged

我将Datagrid绑定到一个ObservableCollection作为源,允许用户更改数据网格单元格值,当我更改单元格值时ObservableCollection不更新的问题

这是我的Datagrid代码:

<DataGrid.Columns>
    <DataGridTextColumn Header="Item" Binding="{Binding Item.ItemName,Mode=TwoWay}" Width="100" IsReadOnly="False" />
    <DataGridTextColumn Header="Price" Binding="{Binding SalePrice,Mode=TwoWay}" Width="100" IsReadOnly="False"  />
    <DataGridTextColumn Header="Qtn" Binding="{Binding Quantity,Mode=TwoWay}" Width="100" IsReadOnly="False"  />
    <DataGridTextColumn Header="Totla" Binding="{Binding Total,Mode=TwoWay}" Width="100" IsReadOnly="False"  />
</DataGrid.Columns>

任何建议

2 个答案:

答案 0 :(得分:3)

WPF DataGrid在编辑其单元格时使用事务范围。这意味着在更改单元格后,需要“提交”才能保持更改。要强制提交,可以使用Tab键或Enter键。

很多人会在一个单元格中输入一个新值,然后将鼠标放入另一个单元格或另一个控件中。发生这种情况时,DataGrid会对事务执行“取消”操作,因此更改不会保留在基础集合中。事实上,除了Tab或Enter(或失去焦点)之外的任何事情都将取消对交易的取消。

如果要捕获更改而不管用户按下了什么键,那么底层类应该实现IEditableObject。这允许视图模型强制提交并保持更改的单元格。

这是WPF DataGrids上众所周知的“问题”。这里有一个清晰的讨论http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

这里讨论了关于同一主题的更微妙的“陷阱”http://blogs.msdn.com/b/vinsibal/archive/2009/04/14/5-more-random-gotchas-with-the-wpf-datagrid.aspx

Why isn't a property in my ViewModel updated when DataGrid changes?

可能重复

答案 1 :(得分:0)

RaisePropertyChanged 实施到您的属性(SalesPrice,Quantity,Total)的Set方法

ObservableCollection仅通知集合更改事件,如添加,从集合中删除项目,ObservableCollection的基础类属性应该单独实现RaisePropertyChanged事件以检测其中的更改