Silverlight中DataGrid翻页或者滚动时CheckBox/RadioButton显示的问题

问题现象

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>

最终效果

选择第一页中的第一行


翻页就不再显示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

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...