【问题标题】:How to get a checkbox from ListViewItem in WPF?如何从 WPF 中的 ListViewItem 获取复选框?
【发布时间】:2019-12-13 21:54:57
【问题描述】:

我有一个 ListView,其中包含多个 ListViewItem 每个 ListViewItem 都包含一个复选框:

<ListViewItem>
        <CheckBox IsChecked="{x:Null}" Name="myCheckBx1">
            <StackPanel  Margin="10,0,10,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Stretch">
                <TextBlock Text="Airline"></TextBlock>
            </StackPanel>
        </CheckBox>
    </ListViewItem>
<ListViewItem>
        <CheckBox IsChecked="{x:Null}" Name="myCheckBx2">
            <StackPanel  Margin="10,0,10,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Stretch">
                <TextBlock Text="Fleet"></TextBlock>
            </StackPanel>
        </CheckBox>
    </ListViewItem>

现在在 C# 上,我想在我的 ListView 中获取所有复选框,我该怎么做? 我想做以下事情:

foreach(ListViewItem item in listView) {
    // Get the checkBox here
}

谢谢。

【问题讨论】:

  • 为什么要拥有所有复选框。?
  • 是的,想要获取我的 ListView 中的所有复选框
  • 我想我问为什么?
  • 获取并计算选中的复选框!
  • 是的,我在创建自定义 ListView 时使用 MVVM

标签: c# wpf listview checkbox


【解决方案1】:

如果没有其他方法,您也可以使用LogicalTreeHelper:

<ListView x:Name="list"> ... </ListView>

在代码隐藏中:

var ref = LogicalTreeHelper.GetChildren(list);

它返回 IEnumerable。我认为通过执行此代码,您将获得包含 ListViewItems 元素的 IEnumerable。因此,对于此集合中的每个元素,请使用相同的模式:

var ref = LogicalTreeHelper.GetChildren(list);

您将获得 Checkbox 对象。然后,您可以从 Checkbox 中获取所需的每个属性。

例子:

foreach (object listView in LogicalTreeHelper.GetChildren(list as FrameworkElement))
{
    foreach (object checkbox in LogicalTreeHelper.GetChildren(obj as FrameworkElement))
    {
        // Some code
    }
}

【讨论】:

  • 我做了同样的事情,但我在执行时出错,foreach(LogicalTreeHelper.GetChildren 中的对象列表(listView as FrameworkElement)){ foreach(LogicalTreeHelper.GetChildren 中的对象复选框(作为 FrameworkElement 列出) ) { CheckBox c = checkbox as CheckBox; c.IsChecked = 真;例如,我尝试检查每个复选框并收到带有消息的 XamlParseException:无法创建 listView 的实例
  • 所以你在 XamlCode 中有问题。当您获得 XamlParseException 时,您总是会获得代码行和代码列。检查您的 xaml 代码并查找错误。我仔细检查了这个解决方案,我复制了您的 xaml 代码并将其粘贴(当然 ListViewItem 必须是 ListView 的子项,所以我将它添加到您的 xaml 代码中)。如果出现问题,请粘贴一些代码。
【解决方案2】:

使用 ListViewItem.Content 属性

【讨论】:

  • 怎么用?我试着做: foreach (ListViewItem item in listView.Items) var v = item.Content as CheckBox;但是 v 总是得到空值!
【解决方案3】:

使您所有的复选框都具有相同的 id(因为它们在不同的列表项中)。使用以下代码

foreach(ListViewItem item in listView) {
  CheckBox chk=item.FindControl("checkboxid");
}

【讨论】:

  • 在 ListViewItem 上找不到 FindControl() 方法?
猜你喜欢
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 2015-10-20
  • 2021-10-05
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多