WPF列表框项目
我有一个ListBox控件,它包含目录中的文件名 我如何迭代控件并获得这些名称?我试过: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
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; }
}