WPF列表框项目

时间:2013-08-23 18:53:58

标签: 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 = listboxFileGroups.Items[i].ToString();
}

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可能想要探索MVVM方法。

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

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

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

this.DataContext = new MyClass();

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

由于您只提到要在目录中显示文件(不包括子目录),您只需将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