DataGrid中多列中的列表框项

时间:2013-12-24 02:09:41

标签: c# wpf datagrid listbox

我正在尝试在每列的每一行中获取每个列表框的项目。我被建议使用“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。同一父控件上还有其他用户控件

Datagrid

1 个答案:

答案 0 :(得分:0)

错误说明错误。尝试从列表中获取第一个元素,如下所示:

ListBox _listBox = FindVisualChildren<ListBox>(obj).FirstOrDefault();