在C#WPF中在应用程序启动时运行代码的正确方法是什么?

时间:2010-11-01 04:11:50

标签: c# wpf

我需要使用目录名填充列表框,以便在应用程序启动时将我的方法放在哪里运行(MainWindow,Window_Loaded或其他)?

1 个答案:

答案 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;
        }
    }