问题现象
Datagrid是silverlight中很常用的控件,经常被用来显示数据,当数据的个数较多时,我们可以使用滚动条或者分页的方式来显示。但是,如果DataGrid中使用了CheckBox或者RadioButton时,会出现如下图所示的问题:
开始的界面:
当我在第一页选中了第一行的radiobutton时:
如果此时我翻到下一页,在没有点击的情况下,第二页中的第一行的RadioButton仍然是被选中了的:
这样的选中方式比较难接受。
问题原因
当翻到下一页时,Datagrid重用了这些RadioButton,所以,还是按照第一页的方式显示了。
解决办法
可以使用partial class在对应的数据项中添加一个属性IsSelected:
public partial class Book { private Boolean _isSelected; public Boolean IsSelected { get { if (_isSelected == null) _isSelected = false; return _isSelected; } set { _isSelected = value; } } }
然后在xaml中Binding这个IsSelected:
<RadioButton IsChecked="{Binding IsSelected,Mode=TwoWay}"></RadioButton>
最终效果
选择第一页中的第一行
具体代码:https://github.com/kiwiwin/silverlight-demo.git 中datagrid-radiobutton-demo
github仓库位置:silverlight-demo
参考资料:
http://stackoverflow.com/questions/12960837/checkBox-in-silverlight-datagrid-behaving-strangely
http://social.msdn.microsoft.com/Forums/en-US/silverlightbugs/thread/06b36cb1-a97c-46c6-872c-ae00e2102877/#501008