WPF列表框项目

WPF列表框项目,wpf,listbox,Wpf,Listbox,我有一个ListBox控件,它包含目录中的文件名 我如何迭代控件并获得这些名称?我试过: for (int i = 0; i < listboxFileGroups.Items.Count; i++) { // I don't want to use properties that start with Selected // Here is what I was looking for string textItem = listboxFil

我有一个ListBox控件,它包含目录中的文件名

我如何迭代控件并获得这些名称?我试过:

for (int i = 0; i < listboxFileGroups.Items.Count; i++)
{
    // I don't want to use properties that start with Selected           
    // Here is what I was looking for
    string textItem = listboxFileGroups.Items[i].ToString();
}
for(int i=0;i

有什么建议吗?

您可能想探索一种MVVM方法

在其中一个视图模型类中,可以有一个
可观测集合

或者,您也可以为usercontrol/window创建一个datatemplate,它将自动将datacontext与视图模型连接起来

因为您只提到要在目录(不包括子目录)中显示文件,所以只需要将ItemsSource绑定到StuffForListBox

   <ListBox ItemsSource="{Binding StuffForListBox}" ... >

要遍历列表框中显示的字符串,只需遍历ObservableCollection


如果您不想麻烦使用MVVM,或者如果这是第三方列表框,您可以尝试在codebehind中获取ItemsSource并循环使用它,但我当然推荐使用MVVM。这会让你的生活更轻松


现在,如果你想变得更疯狂一点,并显示像子文件夹这样的东西,那么
ObservableCollection
就不能解决这个问题。您需要创建一个包含子文件夹的类,以模拟文件夹如何包含文件和子文件夹

 public class DemoItem
 {
    public string Name { get; set; }
    public DemoItem Parent { get; set; }
    public ObservableCollection<DemoItem> Children { get; set; }
    public bool IsSelected { get; set; }
 }
公共类DemoItem
{
公共字符串名称{get;set;}
公共DemoItem父项{get;set;}
公共可观测集合子项{get;set;}
公共布尔值被选为{get;set;}
}
…然后将绑定到列表框的可观察集合基于上述类


如果您这样做,您的列表框将无法正确显示项目,直到您创建一个新的列表框,但我认为这不在问题的范围之外:p

我如何迭代控件?
-您不会在WPF中“迭代控件”。您可以创建一个适当的强类型数据模型,并通过数据绑定将UI与之绑定,然后操作数据,而不是UI。发布一个你需要的屏幕截图,我可以告诉你在WPF中使用的正确方法。你的列表框绑定到什么类型的对象?另外,您是说要获取列表框中除所选项目之外的所有项目吗?@DanielSimpkins,列表框使用绑定到字符串数组的ViewModel。@我选择的词太多太差了。我只是想遍历列表框中的所有文本项。我现在有了答案。为什么不在ViewModel中迭代字符串数组?
   <ListBox ItemsSource="{Binding StuffForListBox}" ... >
 public class DemoItem
 {
    public string Name { get; set; }
    public DemoItem Parent { get; set; }
    public ObservableCollection<DemoItem> Children { get; set; }
    public bool IsSelected { get; set; }
 }