呼び出し側のアプリケーションIDを確定できません。

前のエントリで設定値を保存するコマンドクラスを書いていたが、それをBlend4のInvokeCommandActionビヘイビアでパインドして使おうとしたのだが、Visual Studio 2010では何も問題が無いのにBlend4で以下のエラーが出ることが解った。

エラーの発生元がXAMLだしメッセージからはエラーが全く解らない(MS製品ではよくあることだ)が、Blend4でしかエラーが発生しないことから、デザイン時に何かをしようとしてエラーになっているのだろうと推測した。

デザイン時であるか否かは以下のイディオムで簡単に判定できる。

if (System.ComponentModel.DesignerProperties.IsInDesignTool)

 
あとはこれを怪しい所にセットしていけば良いのだが、原因はすぐに判明した。

AppSettingsCommand.cs (修正前)
    public AppSettingsCommand(Action<T> execute) 
        : base(execute)
    {
        _isolatedStore = IsolatedStorageSettings.ApplicationSettings;
    }

IsolatedStorageSettings.ApplicationSettingsはランタイム時ではないと取得できないのである。
従ってここにIsInDesignToolを挿入することにする。

AppSettingsCommand.cs (修正後)
    public AppSettingsCommand(Action<T> execute) 
        : base(execute)
    {
        if (!System.ComponentModel.DesignerProperties.IsInDesignTool)
        {
            _isolatedStore = IsolatedStorageSettings.ApplicationSettings;
        }
    }

これでBlend4でもエラーはでなくなった。