2013-10-07 55 views
0

我有数据网格绑定到的ObservableCollection作为源,数据网格单元允许用户更改值,这个问题时,我改变细胞重视的ObservableCollection不更新的Datagrid绑定到的ObservableCollection WPF

这里是我的数据网格代码:

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

任何建议

+0

可能的复制*不清楚你在问什么。*什么是你的问题? - 发布相关的数据项目类。 –

+0

我不认为这会起作用,除非您连接了CellUpdateChanged事件来更新该selecteditem。 –

+1

@leolorenzoluis当然是完全不真实和错误的。默认情况下WPF中支持双向数据绑定,没有任何背后的代码。 –

回答

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?

+0

谢谢加里你的解释 –

+0

加里,我想问你,让我们说我们有4个单元格的行。当我编辑改变第四个单元格的第一个单元格时。当我在第一个单元格中进行更改并在SelectionChanged事件中为数据网格提交“按Enter键”时,我在ObservableCollection上进行了更改,但ObservableCollection中的字段发生了更改,但在datagrid“第四个单元格”中仍保留旧值尽管单元格绑定是双​​向的。我希望你明白这一点。 –

+0

对于这种行为,您必须填充INPC处理程序中的第4个单元格 –

0

实施RaisePropertyChanged到您的属性(SalesPrice,数量,合计)的设置方法

的ObservableCollection只通知有关收集改变的事件,如增加,删除从集合项,的ObservableCollection应该seperetly落实RaisePropertyChanged事件背后的类属性,以检测它们的变化

相关问题