バージョン

SavePropertyPersistence イベントと LoadPropertyPersistence イベントの処理

保存およびロードされるすべてのプロパティごとに SavePropertyPersistence イベントと LoadPropertyPersistenceイベントが発生します。これらのイベントの間に各プロパティを検証し、カスタム ロジックを実行する機会が得られます。

SavePropertyPersistence イベント引数 SavePropertyPersistenceEventArgs には、保存されるプロパティについての情報が含まれます。SavePropertyPersistenceEventArgs オブジェクトの Cancel プロパティが True に設定されている場合、コントロールのプロパティの保存を避けることができます。

LoadPropertyPersistence イベント引数 LoadPropertyPersistenceEventArgs には、ロードされるプロパティについての情報が含まれます。LoadPropertyPersistenceEventArgs オブジェクトの Handled プロパティが True に設定されている場合、コントロールのプロパティのロードを避けることができます。

以下の例では、 PersistenceSettings オブジェクトのイベントを登録および使用する方法を示します。

プロパティを検証し、プロパティが特定の基準を満たさない場合にはキャンセル、保存またはロードします。保存プロセスの間、コントロールの Width プロパティの保存をキャンセルします。ロードの間、Height プロパティ値をチェックします。

InitializeComponent メソッドの後でページ コンストラクターに以下のコードを追加します。

Visual Basic の場合:

Private ps As New PersistenceSettings()
Public Sub New()
    InitializeComponent()
    ' イベントを登録します
    AddHandler ps.Events.SavePropertyPersistence, AddressOf _SavePropertyPersistence
    AddHandler ps.Events.LoadPropertyPersistence, AddressOf _LoadPropertyPersistence
End Sub

C# の場合:

PersistenceSettings ps = new PersistenceSettings();
public MainPage()
{
    InitializeComponent();
    // イベントを登録します
    ps.Events.SavePropertyPersistence +=
		new EventHandler<SavePropertyPersistenceEventArgs>(_SavePropertyPersistence);
    ps.Events.LoadPropertyPersistence +=
		new EventHandler<LoadPropertyPersistenceEventArgs>(_LoadPropertyPersistence);
}
  • イベント ハンドラーを追加します。

Visual Basic の場合:

Private Sub _SavePropertyPersistence(ByVal sender As Object, ByVal e As SavePropertyPersistenceEventArgs)
    ' Width プロパティを識別します
    If e.PropertyPath.Equals("Width") Then
        ' Width プロパティの保存をキャンセルします
        e.Cancel = True
    End If
End Sub
Private Sub _LoadPropertyPersistence(ByVal sender As Object, ByVal e As LoadPropertyPersistenceEventArgs)
    ' Height プロパティを識別して、高さが 200 を超える場合は Load をキャンセルします
    If e.PropertyPath.Equals("Width") AndAlso Convert.ToInt32(e.Value) > 200 Then
        ' このプロパティはロードされません
        e.Handled = True
     End If
End Sub

C# の場合:

private void _SavePropertyPersistence(object sender, SavePropertyPersistenceEventArgs e)
{
    // Width プロパティを識別します
    if (e.PropertyPath.Equals("Width"))
    {
        // Width プロパティの保存をキャンセルします
        e.Cancel = true;
    }
}
private void _LoadPropertyPersistence(object sender, LoadPropertyPersistenceEventArgs e)
{
    // Height プロパティを識別して、高さが 200 を超える場合は Load をキャンセルします
    if (e.PropertyPath.Equals("Width") && Convert.ToInt32(e.Value) > 200)
    {
        // このプロパティはロードされません
        e.Handled = true;
    }
}