有关在Windows RT中向ListBox添加项目的说明

时间:2012-12-22 11:29:56

标签: c# windows-8 windows-runtime windows-store-apps

我正在尝试为商店制作一个简单的Windows 8 / RT应用程序,我有一个关于向ListBox添加项目的问题。

在我的主页中我有这段代码:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.brain = new MainController();
        LoadData();
    }
    public void LoadData()
    {
        brain.GetNotesRepoFile().ReadFile();
        Debug(""+brain.GetNotesRepoFile().GetNotesList().Count);
        for(int i = 0; i < brain.GetNotesRepoFile().GetNotesList().Count; i++)
        {
           notesListBox.Items.Add( // code here );
        }
    }
 }


public class NotesRepositoryFile
{
    // CONSTRUCTOR
    public NotesRepositoryFile()
    {
        this.notesRepository = new List<Note>();
    }
    // Read from file
    public async void ReadFile()
    {
        // settings for the file
        var path = @"Files\Notes.txt";
        var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;

        // acquire file
        var file = await folder.GetFileAsync(path);
        var readThis = await Windows.Storage.FileIO.ReadLinesAsync(file);
        foreach (var line in readThis)
        {
            notesRepository.Add(new Note(line.Split(';')[0], line.Split(';')[1]));
            // check if the item was added
            Debug.WriteLine("Added: " + notesRepository[notesRepository.Count - 1].ToString());
        }
        Debug.WriteLine("File read successfully");
    }

}

我的输出是:

0

补充:Test1

补充:Test2

文件已成功读取

我在这里尝试做的是从文件中读取字符串,并使用Items.Add将它们添加到listBox。但由于数组的大小为0,即使成功添加的项目也无效。

我不明白为什么 Debug(“+”brain.GetNotesRepoFile()。GetNotesList()。Count); 之前执行 Brain.GetNotesRepoFile() .ReadFile(); 因为很明显不是这样。

此外,为什么这个解决方案有效,而且上面没有?

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.brain = new MainController();
        ReadFile();
    }
    // Read from file
    public async void ReadFile()
    {
        // settings for the file
        var path = @"Files\Notes.txt";
        var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;

        // acquire file
        var file = await folder.GetFileAsync(path);
        var readThis = await Windows.Storage.FileIO.ReadLinesAsync(file);
        foreach (var line in readThis)
        {
            brain.AddNote(line.Split(';')[0], line.Split(';')[1]);
            notesListBox.Items.Add(brain.GetNotesRepoFile().GetNotesList()[brain.GetNotesRepoFile().GetNotesList().Count - 1].ToString());
        }
        Debug.WriteLine("File read successfully");
    }

}

1 个答案:

答案 0 :(得分:1)

嗯,使用async和await是错误的代码,请根据以下代码进行更改

首先,在NotesRepositoryFile类

public async Task<bool> ReadFile()
{
   //Your code
    if (notesRepository.Count > 0) return true;
            return false;
} 

MainPage中的第二个

public async void LoadData()
{
    bool HasNote = await brain.GetNotesRepoFile().ReadFile();

    if (HasNote)
    {
        for (int i = 0; i < brain.GetNotesRepoFile().notesRepository.Count; i++)
        {
                //Your code
        }
    }
 }