当前位置: 代码迷 >> C# >> WPF的listview怎么获取指定项的单元格
  详细解决方案

WPF的listview怎么获取指定项的单元格

热度:435   发布时间:2016-04-28 08:41:23.0
WPF的listview如何获取指定项的单元格
xaml的代码

<DataTemplate x:Key="isAuditeCheckDt">
            <CheckBox x:Name="isAuditeCheck" IsChecked="{Binding isCheck}" Content="{Binding isCheck}" ></CheckBox>
        </DataTemplate>

<ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=userName}" Header="用户名"  
                                 Width="100"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=type}" Header="类型"  
                                Width="150"/>
                    <GridViewColumn CellTemplate="{StaticResource isAuditeCheckDt}" Header="是否审计"  
                                Width="108"/>
                </GridView>
            </ListView.View>

我该如何获得Checkbox的单元格,我想在初始化时让前三个,或者指定的三个item的Checkbox的isenabled变成false
百度了好久找不到资料啊,找到个类似的用
 private UIElement GetListViewCellControl(int rowIndex, int cellIndex)
        {
            // rowIndex and cellIndex base is 0.
            // First Get ListViewItem
            UIElement u = listView.ItemContainerGenerator.ContainerFromIndex(rowIndex) as UIElement;
            if (u == null) return null;

            // Seartch Unit In ListViewItem 
            while ((u = (VisualTreeHelper.GetChild(u, 0) as UIElement)) != null)
            {
                if (u is GridViewRowPresenter)
                {
                    return VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(u, cellIndex), 0) as UIElement;
                }
            }

            return u;
        }
这个函数,但调试了一下发现没有获取到。类似的还有

 foreach (users user in listView.Items)
            {
                ListViewItem lvi = this.listView.ItemContainerGenerator.ContainerFromItem(user) as ListViewItem;
                CheckBox cb = FindVisualChild<CheckBox>(lvi);
                cb.IsEnabled = false;
            }
 private ChildType FindVisualChild<ChildType>(DependencyObject obj) where ChildType : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is ChildType)
                {
                    return child as ChildType;
                }
                else
                {
                    ChildType childOfChildren = FindVisualChild<ChildType>(child);
                    if (childOfChildren != null)
                    {
                        return childOfChildren;
                    }
                }
            }
            return null;

        }
但是都不行啊!!!都编译通过但是获取不到checkbox啊!!!为什么,求大神解答
------解决思路----------------------
初始化时让前三个,或者指定的三个item的Checkbox的isenabled变成false

->根本不需要遍历什么控件方式。既然使用了Binding  就使用binding方式。 在VM中设定方式,遍历绑定的数据源,再设置一个bool变量来binding到isEnabled上根据条件设定 改变isenabled的值。
  相关解决方案