WPF - ItemsControl - 如何找到ItemTemplate中的“CheckBox”项?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF - ItemsControl - 如何找到ItemTemplate中的“CheckBox”项?相关的知识,希望对你有一定的参考价值。
我有以下(非常简单)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...
}
我怎么做?
答案
首先,如果有任何方法可以避免它,请不要。将CheckBox
的各种属性绑定到您的视图模型而不是尝试手动将它们拉出来更清晰。
也就是说,如果你需要访问你的CheckBox
,你可以使用这样的代码:
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
var checkBox = container.FindName("MyCheckBox") as CheckBox;
另一答案
好的,肯特得到了信誉,但它只是大多数是正确的:)
// This part was good:
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
但是......第二部分会返回null,所以它必须如下:
var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox;
他的代码看起来应该有效,但对于我的情况,我不得不这样做。
另一答案
以下是捕获容纳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;
}
}
我希望有所帮助。
以上是关于WPF - ItemsControl - 如何找到ItemTemplate中的“CheckBox”项?的主要内容,如果未能解决你的问题,请参考以下文章
ItemsControl 中 DataTemplate 中的 WPF UserControl - 如何绑定到 ItemsSource 的父级