我想创建一个应用程序,其中有一个显示所有笔记的主页面,您可以创建新笔记或从列表中选择一个笔记。
现在,它显示所有文件名,例如Sample1.txt,Sample2.txt。
我希望它显示如下:
不喜欢这样:
以下是显示列表的代码:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
using (var store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication())
{
this.NotesListBox.ItemsSource = store.GetFileNames();
}
}
这是主xaml上的绑定
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox x:Name="NotesListBox" SelectionChanged="Notes_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
我很想知道这个......谢谢!
答案 0 :(得分:0)
非常快速且非常脏的解决方案是替换
this.NotesListBox.ItemsSource = store.GetFileNames();
与
var filesNames = store.GetFileNames();
var titles = new List<string>();
foreach (var fileName in fileNames)
{
using (var sr = new StreamReader(new IsolatedStorageFileStream(fileName, FileMode.Open, isf)))
{
titles.Add(sr.ReadLine());
}
}
this.NotesListBox.ItemsSource = titles;
这样您的列表框将列出所有文件的第一行。
此解决方案的问题是,列表框中的项目与文件之间存在链接。更好的解决方案是为您的笔记引入一个模型,例如:
public class Note
{
public string Title { get; set; }
public string Content { get; set; }
public string FileName { get; set; }
}
您可以使用此模型加载所有笔记并将其放在列表框中,如下所示:
// put this in your view class
private List<Note> _notes;
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
_notes = new List<Note>();
var filesNames = store.GetFileNames();
foreach (var fileName in fileNames)
{
using (var sr = new StreamReader(new IsolatedStorageFileStream(fileName, FileMode.Open, isf)))
{
var note = new Note();
note.FileName = fileName;
note.Title = sr.ReadLine();
note.Body = sr.ReadToEnd();
_notes.Add(note);
}
}
this.NotesListBox.ItemsSource = _notes;
}
在您的xaml中,您需要替换
<TextBox Text="{Binding}"/>
与
<TextBox Text="{Binding Title}"/>
在SelectionChanged
处理程序中,您现在可以参考如下注释:
private void Notes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (Note note in e.AddedItems)
{
MessageBox.Show(note.Body);
}
}
更好的解决方案是使用mvvm。但是现在可能还有太长的时间了。
祝你好运!