我有一个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();
}
有什么建议吗?
答案 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