« [VS2010] Silverlight プロジェクトのコード分析 | トップページ | [勉強会@名古屋] 2月6日 わんくま同盟 名古屋勉強会 #11 »

2010年1月 6日 (水)

[SL3] Silverlight で設定をローカルに保存する

書初めw で作ったご挨拶、 じつは 1月 4日の夜にバージョンアップしてまして。 停止ボタンの状態を、 ローカルに覚えているようになってます。 停止状態にしておけば、 リロードしても停止したままになりました。 (…なってるはず f(^^; )

ブラウザ上で動いている Silverlight のアプリにはセキュリティの制限が掛かっているので、 普通に app.conifg に保存することは出来ません。 そこで、 Silverlight 3 から使えるようになった IsolatedStorageSettings クラスを使います。 ソースコードでは、 設定の保存・取出しを扱う RunStateConfig クラスにまとめてあります。
※ ソース一式 (VS2010用) HappyNewYear2010Project20100104.zip (324KB)

20100106_runstateconfig01
※ IDE の背景は Mephist's Hospital (現在 IE のみ閲覧可) より。 (作者了解済み)

まず、 初期化時に IsolatedStorageSettings のインスタンスを取得しておきます。 IsolatedStorage が利用できない環境 (ユーザーが禁止している等) では、 取得時にIsolatedStorageException 例外が出ます。

private IsolatedStorageSettings userSettings;

try
{
    this.userSettings = IsolatedStorageSettings.ApplicationSettings;
}
catch (IsolatedStorageException)
{
    this.userSettings = null;
    //TODO: 「利用不可」フラグにすべき
f(^^;
}

読み書きするときには、 IsolatedStorage が利用可能かどうかを判断してから実行する必要があります。
まずは、 書き込み。

private const string RunStateKey = "RunState";

private void SetConfig(string state)
{
    if (!this.IsUserSettingsEnable)
        return;

    this.userSettings[RunStateKey] = state;
}

続いては、 読み込み。
該当するキーの存在チェックも必要です。 また、 取り出した値は Object 型なので、 適切にキャストしなければなりません。

private const string StatePause = "PUASE";

internal bool IsPause
{
  get
  {
    if (!this.IsUserSettingsEnable)
      return false;

    if (!this.userSettings.Contains(RunStateKey))
      return false;

    return ((string)(this.userSettings[RunStateKey]) == StatePause);
  }
}

ローカルの設定を利用できないことがあるし、 そのときでもちゃんと動作しなきゃいけない、 という点には注意が必要ですが、 それ以外はとても簡単に設定を保存することが出来ると分かるかと思います。 これを、 IsolatedStorageFile クラスを使ってコネコネしようとすると、 けっこうタイヘンです。

|

« [VS2010] Silverlight プロジェクトのコード分析 | トップページ | [勉強会@名古屋] 2月6日 わんくま同盟 名古屋勉強会 #11 »

プログラミング」カテゴリの記事

-プログラミング ( Silverlight )」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [SL3] Silverlight で設定をローカルに保存する:

« [VS2010] Silverlight プロジェクトのコード分析 | トップページ | [勉強会@名古屋] 2月6日 わんくま同盟 名古屋勉強会 #11 »