首先,最近写了一个简单的搜索框,原本的设想是 如果 父元素不包含关键字,但子元素包含该关键字的时候,会做一个判断,并显示其父元素。代码如下:
//proItem是子元素,modelItem是父元素。
if (proItem.IsVisible && !modelItem.IsVisible) modelItem.Visibility = Visibility.Visible;
但当我查找子元素关键字时,发现根本不会显示。于是打断点排查了一下,才明白即使 ChildElement.Visibility 是可见的,可如果SuperElement.IsVisible为false, ChildElement.IsVisible依然为false。
所以改为,
if ((proItem.Visibility == Visibility.Visible) && !proItem.IsVisible) modelItem.Visibility = Visibility.Visible;
其二,写了一个容器的遍历,用得是foreach。当查到目标元素时,会对容器做一些修改。跑起来项目时,竟然抛出了异常,细查一下发现,在遍历中改变了容器的大小后,需要返回或者退出,否则无法通过原先的索引进行遍历了。
最后,有一点小小的心得,在写方法类的时候,实现中尽量少用成员变量,把变量控制在方法体中,以参数的形式传递。总之,一句话,减少耦合度,就是减少Bug,减少工作量!