1

我有一个 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();
}

有什么建议么?

4

1 回答 1

2

您可能想探索一种 MVVM 方法。

在您的视图模型类之一中,您可以拥有ObservableCollection<string>

public ObservableCollection<string> StuffForListBox { get; set; }

使用您希望在 ListBox 中显示的内容填充该 ObservableCollection。在包含 ListBox 的 UserControl 或 Window 的代码隐藏中,将 DataContext 设置为包含StuffForListBox上述内容的类的实例。

this.DataContext = new MyClass();

或者,您也可以为用户控件/窗口创建一个数据模板,它将自动将数据上下文与您的视图模型连接起来。

由于您只提到要显示目录(不包括子目录)中的文件,因此只需将 ItemsSource 绑定到 StuffForListBox。

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

要遍历 ListBox 中显示的字符串,您只需遍历 ObservableCollection。


如果您不想打扰 MVVM 或者这是某个第三方列表框,您可以尝试在代码隐藏中获取 ItemsSource 并循环遍历,但我当然会推荐 MVVM。它会让你的生活更轻松。


现在,如果您想变得更疯狂并显示诸如子文件夹之类的东西,那么ObservableCollection<string>就不会削减它。您需要创建一个包含子文件夹的类来模拟文件夹如何包含文件和子文件夹。

 public class DemoItem
 {
    public string Name { get; set; }
    public DemoItem Parent { get; set; }
    public ObservableCollection<DemoItem> Children { get; set; }
    public bool IsSelected { get; set; }
 }

...然后将绑定到上述类的列表框的可观察集合作为基础。

如果并且当您这样做时,您的列表框将不会正确显示项目,直到您创建DataTemplate但我想这不在问题的范围内:p

于 2013-08-23T19:52:54.487 回答