В последнее время я работал над новым приложением, списком задач (я знаю, ничего инновационного здесь -_-), но потом я прекратил работу до выхода Mango, по очень веской причине, что с Mango я могу иметь локальную базу данных для хранения и управлять структурированными данными моего приложения! Хлопать в ладоши! Хлопать в ладоши!
Одной из многих новых функций, поставляемых с Windows Phone Mango, является возможность иметь локальные базы данных — базы данных Microsoft SQL Server Compact edition (SQL CE) — для ваших приложений.
База данных находится в изолированном хранилище приложения в виде файла.
Если вы не знакомы с изолированным хранилищем, я настоятельно рекомендую вам прочитать статьи «Все о изолированном хранилище WP7» на веб-сайте WindowsPhone Geek .
Чтобы хранить и извлекать данные в локальной базе данных, приложение Windows Phone должно использовать LINQ to SQL.
« LINQ to SQL обеспечивает объектно-ориентированный подход к работе с данными и включает в себя объектную модель и среду выполнения. Объектная модель LINQ to SQL состоит в основном из объекта System.Data.Linq.DataContext, который действует как прокси для локальная база данных. Среда выполнения LINQ to SQL отвечает за соединение мира объектов (объекта DataContext) с миром данных (локальной базой данных). Эти отношения суммированы на следующем изображении ». MSDN
Еще одна вещь, которую нужно объяснить, — это контекст данных. Контекст данных — это объектная модель, которая представляет базу данных, каждый объект представляет собой набор объектов, использующих «простой старый объект CLR» (POCO) с атрибутами.
- Сборка приложения
Мое приложение ToDo выглядит так:
Как видите, моя главная страница представляет собой панораму, содержащую:
* Горячий элемент списка: где вы можете найти задачи, которые будут выполнены в ближайшее время
* Списки: задачи будут отсортированы, задачи, связанные с работой, семьей и т. Д.
Другая страница — это простая страница Windows Phone, которая позволяет добавить новое задание.
В этом посте мы будем работать с этим пользовательским интерфейсом. Теперь вы должны знать, как создать новое приложение Windows Phone 7.1 и как добавлять страницы, поэтому все, что мне нужно сделать, это показать вам код XAML:
<Grid x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0″>
<TextBlock Height=”50″ HorizontalAlignment=”Left” Margin=”10,25,0,0″ Name=”textBlock1″ Text=”Subject:” VerticalAlignment=”Top” Width=”117″ />
<TextBox Height=”66″ HorizontalAlignment=”Left” Margin=”105,9,0,0″ Name=”textBox1″ Text=”" VerticalAlignment=”Top” Width=”342″ />
<TextBlock Height=”43″ HorizontalAlignment=”Left” Margin=”10,97,0,0″ Name=”textBlock2″ Text=”Category:” VerticalAlignment=”Top” Width=”103″ />
<Canvas HorizontalAlignment=”Left” VerticalAlignment=”Top” Width=”345″ Height=”66″ Margin=”111,80,0,0″>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header=”pin to start menu” Click=”MenuItem_Click” Tag=”START_MENU” />
<toolkit:MenuItem Header=”delete” Click=”MenuItem_Click” Tag=”DELETE” />
<toolkit:MenuItem Header=”share” Click=”MenuItem_Click” Tag=”SHARE” />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<Rectangle Fill=”#FFF4F4F5″ Height=”47″ Stroke=”Black” Width=”319″ Canvas.Left=”6″ Canvas.Top=”6″ />
<TextBlock Name=”cat” TextWrapping=”Wrap” Text=” “ Foreground=”Black” Canvas.Left=”71″ Canvas.Top=”27″/>
</Canvas>
<TextBlock Height=”50″ HorizontalAlignment=”Left” Margin=”10,179,0,0″ Name=”textBlock3″ Text=”Priority:” VerticalAlignment=”Top” Width=”95″ />
<RadioButton Content=”Low” Height=”76″ HorizontalAlignment=”Left” Margin=”140,156,0,0″ Name=”radioButton1″ VerticalAlignment=”Top” Width=”134″ />
<RadioButton Content=”High” Height=”73″ HorizontalAlignment=”Right” Margin=”0,156,33,0″ Name=”radioButton2″ VerticalAlignment=”Top” Width=”126″ />
<toolkit:DatePicker Header=”Start date:” Margin=”0,234,0,270″ />
<toolkit:DatePicker Header=”Due date:” Margin=”0,331,0,180″ />
<CheckBox Content=”Completed” Height=”76″ HorizontalAlignment=”Left” Margin=”6,411,0,0″ Name=”checkBox1″ VerticalAlignment=”Top” Width=”190″ />
<toolkit:DatePicker Header=”Date completed:” Margin=”2,493,9,21″ />
</Grid>
Теперь, когда пользовательский интерфейс готов, мы создадим контекст данных.
Первое, что нужно сделать, это добавить ссылку System.Data.Linq, чтобы иметь возможность работать с LINQ to SQL.
Затем добавьте новый класс, я назову его задачей.
[Table]
public class task : INotifyPropertyChanged, INotifyPropertyChanging
{
private string _subject;
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
public string Subject
{
get
{
return _subject;
}
set
{
if (_subject != value)
{
NotifyPropertyChanging(“Subject”);
_subject = value;
NotifyPropertyChanged(“Subject”);
}
}
}
private string _category;
public string Category
{
get
{
return _category;
}
set
{
if (_category != value)
{
NotifyPropertyChanging(“Category”);
_category = value;
NotifyPropertyChanged(“Category”);
}
}
}
private bool _completed;
[Column]
public bool Completed
{
get
{
return _completed;
}
set
{
if (_completed != value)
{
NotifyPropertyChanging(“Completed”);
_completed = value;
NotifyPropertyChanged(“Completed”);
}
}
}
private bool _priority;
[Column]
public bool Priority
{
get
{
return _priority;
}
set
{
if (_priority != value)
{
NotifyPropertyChanging(“Priority”);
_priority = value;
NotifyPropertyChanged(“Priority”);
}
}
}
private DateTime _startDate;
[Column]
public DateTime StartDate
{
get
{
return _startDate;
}
set
{
if (_startDate != value)
{
NotifyPropertyChanging(“StartDate”);
_startDate = value;
NotifyPropertyChanged(“StartDate”);
}
}
}
private DateTime _dueDate;
[Column]
public DateTime DuetDate
{
get
{
return _dueDate;
}
set
{
if (_dueDate != value)
{
NotifyPropertyChanging(“DuetDate”);
_dueDate = value;
NotifyPropertyChanged(“DuetDate”);
}
}
}
private DateTime _dateCompleted;
[Column]
public DateTime DateCompleted
{
get
{
return _dateCompleted;
}
set
{
if (_dateCompleted != value)
{
NotifyPropertyChanging(“DateCompleted”);
_dateCompleted = value;
NotifyPropertyChanged(“DateCompleted”);
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangingEventHandler PropertyChanging;
private void NotifyPropertyChanging(string propertyName)
{
if (PropertyChanging != null)
{
PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
}
}
}
Добавьте еще один класс с именем TaskDataContext, который наследуется от DataContext:
namespace task
{
public class TaskDataContext: DataContext
{
public TaskDataContext(string connectionString): base(connectionString) { }
public Table<task> tasks { get { return this.GetTable<task>(); } }
}
}
Обратите внимание, что мы должны проверить, существует ли база данных, если нет, нам нужно ее создать.
В MainPage.xaml.cs добавьте следующий код:
using (TaskDataContext context = new TaskDataContext(connectionString))
{
if (!context.DatabaseExists())
{
context.CreateDatabase();
}
}
Таким образом, чтобы использовать локальную базу данных, нам нужно указать контекст данных, а затем создать базу данных, если она не существует.
В следующем посте мы узнаем, как запрашивать базу данных. Оставайтесь в курсе!



