我正在尝试在每列的每一行中获取每个列表框的项目。我被建议使用“FindVisualChildren”方法/函数,但无法通过我的按钮onclick事件调用它。我收到错误......
"Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<System.Windows.Controls.ListBox>' to 'System.Windows.Controls.ListBox'. An explicit conversion exists (are you missing a cast?)"
并且我不确定如何处理它。
public static IEnumerable<childItem> FindVisualChildren<childItem>(DependencyObject obj) where childItem : DependencyObject
{
// Search immediate children
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child is childItem)
yield return (childItem)child;
else
{
var childOfChild = FindVisualChildren<childItem>(child);
if (childOfChild != null)
{
foreach (var item in childOfChild)
{
yield return item;
}
}
}
}
yield return null;
}
我正在使用...
private void button1_Click(object sender, RoutedEventArgs e)
{
// Update Job Step Grid ListBox
for (int i = 0; i < dataGridJobSteps.Items.Count; i++)
{
DependencyObject obj = dataGridJobSteps.ItemContainerGenerator.ContainerFromIndex(i);
ListBox _listBox = FindVisualChildren<ListBox>(obj);
if (_listBox != null)
{
var selectedItems = _listBox.Items;
foreach (var selectedItem in selectedItems)
{
MessageBox.Show(selectedItem.ToString());
}
}
}
}
我知道我应该使用MVVM,但这对我来说是一个陡峭的学习限制,我需要实现这段代码才能继续...任何帮助都会得到赞赏。
我正在尝试做的图片... DB中有一个外键与一个主表和两个辅助数据库表相关联。我的网格包含多行数据,每行中有两列可能的ListBox项目列表。一个用于潜在事故和危险,另一个用于控制和检查。用户可以向主要添加/删除行,然后向这两列添加/删除项目。如果您需要更多信息,请与我们联系。
PS。同一父控件上还有其他用户控件
答案 0 :(得分:0)
错误说明错误。尝试从列表中获取第一个元素,如下所示:
ListBox _listBox = FindVisualChildren<ListBox>(obj).FirstOrDefault();