SilverLight 4 DataGrid&;MVVM:使用SelectionChanged触发器选中复选框,但NotifyPropertyChanged会导致崩溃

SilverLight 4 DataGrid&;MVVM:使用SelectionChanged触发器选中复选框,但NotifyPropertyChanged会导致崩溃,mvvm,silverlight-4.0,datagrid,inotifypropertychanged,Mvvm,Silverlight 4.0,Datagrid,Inotifypropertychanged,我的DataGrid中有一个DataGridCheckBoxColumn,用于指示用户选择的行。我希望通过单击选中/取消选中复选框。使列可编辑(即IsReadOnly=“False”)意味着用户必须单击两次(第一次单击仅选择行,第二次单击更改复选框),因此我决定在视图模型代码中设置/清除列绑定到的属性,以响应SelectionChanged触发器触发 设置/清除属性可以正常工作,但是只要我调用NotifyPropertyChanged(“网格绑定到的集合名称”)以获取视图以显示更改,这将导致Se

我的DataGrid中有一个DataGridCheckBoxColumn,用于指示用户选择的行。我希望通过单击选中/取消选中复选框。使列可编辑(即IsReadOnly=“False”)意味着用户必须单击两次(第一次单击仅选择行,第二次单击更改复选框),因此我决定在视图模型代码中设置/清除列绑定到的属性,以响应SelectionChanged触发器触发

设置/清除属性可以正常工作,但是只要我调用NotifyPropertyChanged(“网格绑定到的集合名称”)以获取视图以显示更改,这将导致SelectionChanged触发器再次触发。这个循环大约10次,直到抛出异常为止

如果我删除对NotifyPropertyChanged的调用,SelectionChanged触发器将触发一次,但我当然看不到UI中有任何更改。如果这有任何区别,则集合是PagedCollectionView

我怎样才能让它工作?注意-我使用的是MVVM模式,所以一切都是通过绑定到视图模型来完成的(没有代码隐藏)


谢谢

听起来你设计了一个无限循环

但是尝试使用selectionchanged而不是selectionchanged


或者在viewmodel中设置isloading标志,如果isloading为true,则不要调用inotify

我找到了一个非常简单的解决方案,它不涉及触发器或代码隐藏。见:


它似乎通过使用列模板工作,但只提供CellEditingTemplate而没有CellTemplate。

没有selectionchanged触发器。