silverlight 中datagrid不能选中行的问题

silverlight 中datagrid不能选中行的问题,第1张

概述前段时间在写 silverlight 程序时,有位小伙子绑定的datagrid, 出现其中一行不能被选中的情况,当点击此行时,会选中另外的行.  后来跟踪发现,这位同事写的类中, override 了 Equals() 方法, 并且是确定对象的一个ID属性,如果二个对象的ID相等,则返回真.   而 SL 的 DataGrid 在加载数据时,会检查数据的相等性, 即调用  Equals()方法对比

前段时间在写 silverlight 程序时,有位小伙子绑定的datagrID,出现其中一行不能被选中的情况,当点击此行时,会选中另外的行.

 后来跟踪发现,这位同事写的类中,overrIDe 了 Equals() 方法,并且是确定对象的一个ID属性,如果二个对象的ID相等,则返回真.

 

而 SL 的 DataGrID 在加载数据时,会检查数据的相等性,即调用  Equals()方法对比.就导致上面所说的问题.

 

还有就是,如果同一个对象在集合中增加了二次,也会出现如上问题,因为本身就是同一个对象了.

 

测试代码看起来如下:

        private voID TestDataGrID()
        {
            //ObservableCollection<KtwlSerializeClass> List = new ObservableCollection<KtwlSerializeClass>();
            List<KtwlSerializeClass> List = new List<KtwlSerializeClass>();

            KtwlSerializeClass c = new KtwlSerializeClass("初审");
            c.Property1 = "aaa";
            c.Property2 = 1;
            List.Add(c);

            c = new KtwlSerializeClass("复审");
            c.Property1 = "aaa";
            c.Property2 = 1;
            List.Add(c);

            c = new KtwlSerializeClass("复审");
            c.Property1 = "aaa";
            c.Property2 = 1;
            List.Add(c);
            //c.Property2 = 33;
            // 再增加相同对象,则此行不能被选中
            //List.Add(c);
            //List.Add(c);

            c = new KtwlSerializeClass("初审");
            c.Property1 = "aaa";
            c.Property2 = 1;
            List.Add(c);

            GrdTest.ItemsSource = List;
            (new TestChilDWindow(List)).Show();

        }

        private voID button_Click(object sender,RoutedEventArgs e)
        {
            TestDataGrID();
        }
    }

    public class KtwlSerializeClass
    {
        public KtwlSerializeClass(string name)
        {
            this.name = name;
        }

        public string Property1 { get; set; }
        public int Property2 { get; set; }
        public string name { get; set; }

        public overrIDe bool Equals(object obj)        {            if (this == obj) return true;            if (obj == null) return false;            if (!(obj is KtwlSerializeClass)) return false;            if (((KtwlSerializeClass)obj).name == this.name)                 return true;            else                 return false;        }    }

总结

以上是内存溢出为你收集整理的silverlight 中datagrid不能选中行的问题全部内容,希望文章能够帮你解决silverlight 中datagrid不能选中行的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1039138.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存