我有一个组合框,其复选框为combobox.itemtemplate。
<ComboBox Name="comboBoxTest"
SelectedValuePath="Test"
SelectedItem="{Binding SelectedTest, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValue="{Binding SelectedTest, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Test, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
TextBoxBase.TextChanged ="comboBoxTest_TextChanged" Grid.ColumnSpan="2"
TextSearch.TextPath="Model" >
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Name="checkBoxTest"
Content="{Binding Test}"
Click="checkBoxTest_Click"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
生成结果列表时,“ - 全选 - ”项已添加到结果列表中。
当用户检查“全部”项目时,也应检查其他复选框。 我使用下面的代码,但它不起作用。
if (checkBoxTest.Content.ToString().Equals("--Select All--"))
{
foreach (object item in comboBoxTest.Items)
{
ComboBoxItem comboBoxItem = comboBoxTest.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem;
FrameworkElement element = comboBoxItem.ContentTemplate.LoadContent() as FrameworkElement;
CheckBox checkBox = element.FindName("checkBoxTest") as CheckBox;
checkBox.IsChecked = true;
}
}
答案 0 :(得分:1)
在您的ComboBox中使用CompositeCollection,查看以下答案以获取更多信息
答案 1 :(得分:1)
您的代码中几乎没有问题让我先告诉您这些问题。
参见下面的代码,当&#34;选择全部&#34;时,选择组合框中的所有复选框。选中复选框。
您的复选框点击事件应如下所示。
private void checkBoxTest_Click(object sender, RoutedEventArgs e)
{
CheckBox checkBoxTest = e.Source as CheckBox;
if (checkBoxTest == null)
return;
if (checkBoxTest.Content.ToString().Contains("Select All") && checkBoxTest.IsChecked == true)
{
foreach (object item in comboBoxTest.Items)
{
ComboBoxItem comboBoxItem = comboBoxTest.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem;
if (comboBoxItem == null)
{
return;
}
CheckBox checkBox = FindVisualChildByName<CheckBox>(comboBoxItem, "checkBoxTest");
checkBox.IsChecked = true;
}
}
}
我添加了一个新方法来从子名称及其类型中获取任何元素中的可视子对象。
private static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
string controlName = child.GetValue(NameProperty) as string;
if (controlName == name)
{
return child as T;
}
T result = FindVisualChildByName<T>(child, name);
if (result != null)
return result;
}
return null;
}