Я довольно новичок в Silverlight и C #, я только что сделал небольшое приложение, которое позволяет пользователям добавлять книги (название, автора и описание), они также могут искать в этих полях с помощью автозаполнения.
Теперь я использовал наблюдаемую коллекцию только один раз, и я знаю, как использовать ее только одним способом - использовать кнопки (одну для сохранения и одну для загрузки коллекции).Тем не менее, я хочу иметь возможность загружать коллекцию сама при запуске приложения, чтобы потом можно было удалить кнопку.
Может кто-нибудь посоветовать, как мне это сделать?Я также использую MVVM, в случае, если это важно.
Дополнительные очки брауни, если вы также можете сказать мне, как сохранить коллекцию при выходе из приложения (но это приятно иметь)
Огромное спасибо заранее Dom
Вот код, извините, что не опубликовал его раньше.
MainViewModel
using System.Collections.ObjectModel;
using System.IO;
using System.IO.IsolatedStorage;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Xml;
using PTL.Legal.CRM.Silverlight.Common.Commanding;
namespace BookSearch1._1.ViewModels
{
public class MainViewModel : ViewModelBase
{
private BookViewModel _selectedBook;
#region Constructor
public MainViewModel()
{
SubmitCommand = new DelegateCommand<object>(AddBook);
SaveCommand = new DelegateCommand<object>(SaveResults);
LoadCommand = new DelegateCommand<object>(LoadResults);
Books = new ObservableCollection<BookViewModel>();
SelectedBook = new BookViewModel();
}
#endregion
#region Properties
public void AddBook(object obj)
{
Books.Add(SelectedBook);
}
public ICommand SubmitCommand { get; set; }
public ICommand SaveCommand { get; set; }
public ICommand LoadCommand { get; set; }
public BookViewModel SelectedBook
{
get { return _selectedBook; }
set { _selectedBook = value; OnPropertyChanged("SelectedBook"); }
}
public void SaveResults(object obj)
{
//using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
//{
// using (IsolatedStorageFileStream isoStream =
// new IsolatedStorageFileStream("MainSettings.xml", FileMode.Create, isf))
// {
// var settings = new XmlWriterSettings();
// settings.Indent = true;
// using (XmlWriter writer = XmlWriter.Create(isoStream, settings))
// {
// writer.WriteStartElement("UserSettings");
// foreach (string result in Books)
// {
// writer.WriteStartElement("Result");
// writer.WriteString(result);
// writer.WriteEndElement();
// }
// writer.WriteEndElement();
// writer.Flush();
// }
// }
//}
//MessageBox.Show("Settings applied.");
}
public void LoadResults(object obj)
{
//using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
//{
// var storStream =
// new StreamReader(new IsolatedStorageFileStream("MainSettings.xml", FileMode.Open, isf));
// var xmlReaderSettings = new XmlReaderSettings
// {
// IgnoreWhitespace = true,
// IgnoreComments = true,
// CheckCharacters = true
// };
// XmlReader xmlReader = XmlReader.Create(storStream, xmlReaderSettings);
// while (xmlReader.Read())
// {
// if (xmlReader.NodeType == XmlNodeType.Element &&
// "Result" == xmlReader.LocalName)
// {
// Books.Add(xmlReader.ReadElementContentAsString());
// }
// }
// xmlReader.Close();
//}
}
#endregion
public AutoCompleteFilterPredicate<object> CustomFilter
{
get
{
return new AutoCompleteFilterPredicate<object>(SearchBooks);
}
}
bool SearchBooks(string search, object value)
{
// Cast the value to an Employee.
var books = value as BookViewModel;
if (books != null)
{
// Look for a match in the first and last names.
if (SelectedBook.Title.ToLower().Contains(search.ToLower()) || SelectedBook.Author.ToLower().Contains(search.ToLower()) || SelectedBook.Description.ToLower().Contains(search.ToLower()))
return true;
}
// If no match, return false.
return false;
}
public ObservableCollection<BookViewModel> Books { get; set; }
}
}