我需要使用目录名填充列表框,以便在应用程序启动时将我的方法放在哪里运行(MainWindow,Window_Loaded或其他)?
答案 0 :(得分:1)
要使用ViewModel在XAML中创建ListBox并将ItemsSource绑定到项目集合,然后定义每个项目应该如何显示的模板 - 这将是一个很好的起点:http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections。使用此方法后,您将意识到维护代码时的好处(即使您的视图发生更改,您必须更新UI,这很简单)以及将设计与代码分离的好处。
实际发生的是你的XAML被编译并通过你MainWindow的构造函数中的InitializeComponent()方法调用来运行。
如果你确实想要使用代码而不是XAML,你可以为Window.Loaded事件分配一个处理程序 - 请注意,虽然这可能会发生多次,所以在其中使用一个标志来看它还没有运行。
虽然使用MVVM有好处 - 我不会像XAML中的所有内容一样 - 我会在XAML中定义我的ListBox,模板等,但是你想要条件绑定或者我发现在代码中这样做更容易as:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (!this.hasLoaded)
{
this.hasLoaded = true;
DirectoryInfo di = new DirectoryInfo("."); // "." is the current dir we are in
FileInfo[] files = di.GetFiles();
List<string> fileNames = new List<string>(files.Length);
foreach(FileInfo fi in files)
fileNames.Add(fi.Name);
this.listBox1.ItemsSource = fileNames;
}
}