最近的项目用到了DataGrid控件,做个笔记,记录一下开发过程中遇到的问题:
1.DataGrid的ItemSource的绑定最好使用ObservableCollection<>集合类型,能够自动更新数据到前台。
2.DataGrid自带键盘导航上下左右键切换选中单元格或行的功能。但是,如果绑定了SelectedIndex(selectedItem等)属性,并且Mode=Twoway,就会导致上下左右键失效。如果绑定成Mode=Oneway,就不会失效。也就是说,前台不能通过绑定把数据传到后台。至于如果真这么做,怎么把SelectedIndex值传到后台,就另想办法(我是使用SelectedChanged事件把Index传到后台)。
3.通过SelectedIndex改变选中的行(不是通过鼠标点击)后,按下上或下键后,DataGrid会选中SelectedIndex改变之前的那行的+1或-1行,而不是选中SelectedIndex改变之后的那行的+1或-1行。原因是dataGrid的CurrentItem属性还是SelectedIndex改变之前的值呢,所以需要更新一下CurrentItem属性。也可以直接设置datagrid.CurrentItem = datagrid.SelectedItem.
4.关于当行数较多时,希望把某一行显示到可视范围内,即自动拉动滚动条的方法:dataGrid.ScrollIntoView();改变之前需要先更新一下DataGrid:dataGrid.UpdateLayout(); 这个网上好多方法;
但是,如果DataGrid控件没有显示出来(例如在未显示的Tab页中),移动滚动条后,只会显示到最顶端或最底端。
5.如果想屏蔽到DataGrid自带的某些快捷键,可以使用:
例如:
<DataGrid.InputBindings>
<KeyBinding Gesture="Delete" Command="ApplicationCommands.NotACommand"/>
</DataGrid.InputBindings>
6.绑定的属性可以绑定到样式里,包括DataGrid的行、列和单元格样式等,即使是单独的一个样式文件。
如果有哪里不正确,欢迎各位大神指正。