26

我有以下(非常简单的)ItemsControl:

<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...
}

我怎么做?

4

4 回答 4

29

好的,肯特得到了赞扬,但它只是大部分是正确的:)

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

但是......第二部分将返回null,所以它必须如下:

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

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

于 2009-03-02T20:03:57.037 回答
19

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

也就是说,如果你需要访问你的CheckBox,你应该能够使用这样的代码:

var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
var checkBox = container.FindName("MyCheckBox") as CheckBox;
于 2009-03-02T17:35:38.283 回答
0

这是一个捕获包含您的 ItemsControl 项目的容器的示例:

       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;
            }
        }

我希望这会有所帮助。

于 2011-03-03T18:45:04.093 回答
0

我使用了 Kent 和 Timothy 提供的代码,但我也需要这一行。

整个代码片段如下:

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

干杯!

于 2019-04-30T15:00:29.880 回答