我正在尝试通过数据绑定检索多个图像和文本,但我只设法检索隔离存储中的第一个文本(下面的代码)。
是否可以通过数据绑定检索多个文本到ListBox?
string imageFileName = App.imagePath;
string a;
object b;
sting h;
int i;
string noteSeparate;
private void Library_Loaded(object sender, RoutedEventArgs e)
{
if (MainListBox.Items.Count == 0)
{
//To save the separated note by '^'
string[] noteSeparated;
//Read the file and display it line by line.
IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
//Read the note saved in myFile.txt
StreamReader readFile = new StreamReader(new IsolatedStorageFileStream("ViewFolder\\myFile.txt", FileMode.Open, myStore));
try
{
String fileText = readFile.ReadLine();
//noteSeparated is the variable that save the retrieve note from myFile.txt and is noteSeparated by '^'
noteSeparated = fileText.Split(new char[] { '^' });
for (i = 0; i < noteSeparated.Length; i = i + 3)
{
noteSeparate = noteSeparated[i];
a = noteSeparate;
break;
}
h = a;
readFile.Close();
}
catch (Exception)
{
noNoteBlock.Visibility = Visibility.Visible;
}
}
string imageFolder = "imageFolder";
var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
// Check if directory exists
if (!isoFile.DirectoryExists(imageFolder))
{
//isoFile.CreateDirectory(imageFolder);
throw new Exception("Image directory not found");
}
ObservableCollection<Items> LibraryItems = new ObservableCollection<Items>();
// Get files
foreach (string fileName in isoFile.GetFileNames())
{
//string filePath = Path.Combine(imageFolder, imageFileName);
string filePath = Path.Combine(imageFolder, fileName);
using (var imageStream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read))
{
var imageSource = PictureDecoder.DecodeJpeg(imageStream);
BitmapImage bi = new BitmapImage();
ListBoxItem item = new ListBoxItem();
bi.SetSource(imageStream);
item.Content = new Image() { Source = bi, MaxHeight = 100, MaxWidth = 100, Margin = new Thickness(0, 0, 0, 20) };
//MainListBox.Items.Add(item);
b = bi;
}
LibraryItems.Add(new Items(b, h));
MainListBox.ItemsSource = LibraryItems;
}
}
任何人都可以帮我检索保存在独立存储中的所有文本。 隔离文件中的文本格式为“noteTitle ^ note ^ imagePath ^ noteTitle ^ note ^ imagePath ^ ....”等等。我试图仅检索所有noteTitle。
任何人都可以帮助我获取所有 noteTitle 吗?
答案 0 :(得分:0)
使用Regex
:
using (var streamReader = new StreamReader(new IsolatedStorageFileStream("ViewFolder\\myFile.txt", FileMode.Open, myStore)))
{
var text = streamReader.ReadToEnd();
var titles = Regex.Matches(text, @"(?<title>[^\^]+)\^(?<note>[^\^]+)\^(?<imagePath>[^\^]+)")
.Cast<Match>()
.Select(arg => arg.Groups["title"])
.ToList();
}
或Split
using (var streamReader = new StreamReader(new IsolatedStorageFileStream("ViewFolder\\myFile.txt", FileMode.Open, myStore)))
{
var text = streamReader.ReadToEnd();
var i = 0;
var titles = text.Split('^').Where(arg => i++ % 3 == 0).ToList();
}
[编辑] 将列表绑定到ListBox
:
private void Library_Loaded(object sender, RoutedEventArgs e)
{
using (var streamReader = new StreamReader(new IsolatedStorageFileStream("ViewFolder\\myFile.txt", FileMode.Open, myStore)))
{
var text = streamReader.ReadToEnd();
var i = 0;
MainListBox.ItemsSource = text.Split('^').Where(arg => i++ % 3 == 0).ToList();
}
}
<强> [编辑] 强>
替换这段代码:
String fileText = readFile.ReadLine();
//noteSeparated is the variable that save the retrieve note from myFile.txt and is noteSeparated by '^'
noteSeparated = fileText.Split(new char[] { '^' });
for (i = 0; i < noteSeparated.Length; i = i + 3)
{
noteSeparate = noteSeparated[i];
a = noteSeparate;
break;
}
h = a;
使用:
var fileText = readFile.ReadToEnd();
var i = 0;
var titles = fileText .Split('^').Where(arg => i++ % 3 == 0).ToList();
titles
将是notTitle
的列表。