代码之家  ›  专栏  ›  技术社区  ›  Timothy Khouri

WPF-ItemsControl-如何获取和查找ItemTemplate中的“复选框”项?

  •  25
  • Timothy Khouri  · 技术社区  · 17 年前

    我有以下(非常简单的)Items控件:

    <ItemsControl Name="BlahList" ItemsSource="{Binding Blah}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <CheckBox Name="MyCheckBox" Content="{Binding Text}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    

    在代码中,我想做以下事情:

    foreach (var dahCurrentItem in BlahList.Items)
    {
        var ItemCheckBox = BlahList.GimmeMyControl(dahCurrentItem, "MyCheckBox")
    
        // I'm going to do something with the check box here...
    }
    

    我该怎么做?

    3 回复  |  直到 7 年前
        1
  •  29
  •   Ignatius    9 年前

    好吧,肯特得到了荣誉,但这只是 正确的

    // This part was good:
    var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
    

    但是。..第二部分将返回null,因此必须如下:

    var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox;
    

    他的代码看起来应该可以工作,但就我而言,我不得不这样做。

        2
  •  19
  •   Tim Cooper    14 年前

    首先,如果有任何方法可以避免,请不要这样做。绑定的各种属性要干净得多 CheckBox 而不是试图手动将它们提取出来。

    复选框 ,你应该能够使用这样的代码:

    var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
    var checkBox = container.FindName("MyCheckBox") as CheckBox;
    
        3
  •  0
  •   Brandon    14 年前

    以下是一个捕获容纳Items Control项的容器的示例:

           CheckBox checkbox = sender as CheckBox;
    
            foreach (var item in MembersItemsControl.Items)
            {
                var container = 
    MembersItemsControl.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
    
                UserInformation user = container.DataContext as UserInformation;
    
                bool isMale = true;
                if (user.sex == isMale && checkbox.IsChecked.Value == true)
                {
                    container.Visibility = System.Windows.Visibility.Visible;
                }
            }
    

    我希望这能有所帮助。

        4
  •  0
  •   mZm    7 年前

    整个代码片段如下:

    var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
    container.ApplyTemplate()
    var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox;