Dim memoryStream As New MemoryStream() Dim settings As New PersistenceSettings() ' 保存されたプロパティのカウンター Dim SavedPropertiesCount As Integer = 0
PersistenceSaved イベントと PersistenceLoaded イベントによってパーシステンス プロセスをカスタマイズできます。これらのイベントはすべてのプロパティが保存またはロードされた後に限り発生します。
PersistenceSaved イベント ハンドラーを使用して、保存プロセスが完了したことをアプリケーションに通知できます。このとき、インジケーターまたはメッセージを表示して、エンドユーザーにこのステップが正常に実行されたことを通知できます。
PersistenceLoaded イベント ハンドラーは、コントロールの設定のロードが完了したことをエンドユーザーに通知できます。ロード プロセスの間に例外がある場合、 PersistenceLoadedEventArgs イベント引数の PropertyExceptions プロパティによって、それらを取得およびレポートできます。ロード プロセスが正常に完了した場合、通知を表示できます。
以下の例では、 PersistenceSettings オブジェクトのイベントを登録および使用する方法を示します。
XAML ファイルに「txtAccountName」という名前の TextBox コントロールを追加します。
2 つのボタンを追加して、保存およびロード プロセスを実行します。
コード ビハインドで電話ページ クラスに以下を追加します。
Visual Basic の場合:
Dim memoryStream As New MemoryStream() Dim settings As New PersistenceSettings() ' 保存されたプロパティのカウンター Dim SavedPropertiesCount As Integer = 0
C# の場合:
MemoryStream memoryStream = new MemoryStream(); PersistenceSettings settings = new PersistenceSettings(); // 保存されたプロパティのカウンター int SavedPropertiesCount = 0;
InitializeComponent メソッドの後でページ コンストラクターに以下のコードを追加します。
Visual Basic の場合:
' 保持グループを保存およびロードする間に発生するイベントを登録します。 AddHandler settings.Events.SavePropertyPersistence, AddressOf Events_SavePropertyPersistence AddHandler settings.Events.PersistenceSaved, AddressOf Events_PersistenceSaved AddHandler settings.Events.PersistenceLoaded, AddressOf Events_PersistenceLoaded
C# の場合:
// 保持グループを保存およびロードする間に発生するイベントを登録します。
settings.Events.SavePropertyPersistence +=
new EventHandler<SavePropertyPersistenceEventArgs>(Events_SavePropertyPersistence);
settings.Events.PersistenceSaved +=
new EventHandler<PersistenceSavedEventArgs>(Events_PersistenceSaved);
settings.Events.PersistenceLoaded +=
new EventHandler<PersistenceLoadedEventArgs>(Events_PersistenceLoaded);
イベント ハンドラーを追加します。
Visual Basic の場合:
Private Sub BtnSave_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
memoryStream = PersistenceManager.Save(txtAccountName, settings)
End Sub
Private Sub Events_PersistenceSaved(ByVal sender As Object, ByVal e As PersistenceSavedEventArgs)
' 保存プロセスの完了の通知
MessageBox.Show("Save process completed for " & SavedPropertiesCount.ToString() & " properties.")
End Sub
Private Sub BtnLoad_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
memoryStream.Position = 0
PersistenceManager.Load(txtAccountName, memoryStream, settings)
End Sub
Private Sub Events_PersistenceLoaded(ByVal sender As Object, ByVal e As PersistenceLoadedEventArgs)
Dim excCount As Integer = e.PropertyExceptions.Count
If excCount > 0 Then
For Each details As PropertyPersistenceExceptionDetails In e.PropertyExceptions
MessageBox.Show(("The property " & details.PropertyInfo.Name & " has invalid value.") + details.Exception.Message.ToString())
Next
End If
End Sub
Private Sub Events_SavePropertyPersistence(ByVal sender As Object, ByVal e As SavePropertyPersistenceEventArgs)
' Count the properties being saved
SavedPropertiesCount += 1
End Sub
C# の場合:
private void BtnSave_Click(object sender, RoutedEventArgs e)
{
memoryStream = PersistenceManager.Save(txtAccountName, settings);
}
private void Events_PersistenceSaved(object sender, PersistenceSavedEventArgs e)
{
// 保存プロセスの完了の通知
MessageBox.Show("Save process completed for " + SavedPropertiesCount.ToString() + " properties.");
}
private void BtnLoad_Click(object sender, RoutedEventArgs e)
{
memoryStream.Position = 0;
PersistenceManager.Load(txtAccountName, memoryStream, settings);
}
void Events_PersistenceLoaded(object sender, PersistenceLoadedEventArgs e)
{
int excCount = e.PropertyExceptions.Count;
if (excCount > 0)
{
foreach (PropertyPersistenceExceptionDetails details in e.PropertyExceptions)
{
MessageBox.Show("The property " + details.PropertyInfo.Name + " has invalid value." + details.Exception.Message.ToString());
}
}
}