저는 Silverlight 및 C#에 익숙하지 않습니다. 사용자가 책 (제목, 작성자 및 설명)을 추가 할 수 있도록 약간의 응용 프로그램을 만들었습니다. 자동 완성 상자로이 필드를 검색하십시오.Silverlight 4 - Observable Collections (시작시로드)
이제 관측 가능한 컬렉션을 한 번만 사용했는데 사용 방법을 알고있는 유일한 방법은 버튼을 사용하는 것입니다 (하나는 저장하고 하나는 컬렉션을로드하는 것입니다). 그러나 응용 프로그램이 시작될 때 컬렉션로드 자체를 가질 수 있으므로 버튼을 제거 할 수 있습니다.
누군가 내가이 작업을 수행 할 수있는 방법에 대해 조언을 구할 수 있습니까? MVVM도 중요하게 사용하고 있습니다. 당신은 또한 어떻게 응용 프로그램을 종료시 수집을 저장하는 말해 줄 수 (하지만이 가지고 멋진입니다) 사전 돔
에
대규모 감사
여분 브라우니 점을 경우 여기에 일부 코드 전에 게시하지 않아서 죄송합니다. App.xaml라는 이름의 파일에
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; }
}
}
로직에 대한 몇 가지 코드를 게시하십시오. thanks –
MainViewModel을 게시했습니다. 덕분에 도움이 되었기를 바랍니다. – domsbrown
Daok와 dev.bv의 답변을 확인하십시오. 그것은 올바른 방향입니다. 또한 코드를 리팩터링해야하지만 http://codereview.stackexchange.com/ –