私が持つと一緒に、仕事にツームストーン取得することができましたオブジェクトは、次の操作を実行して、すべての私のviewmodelsに見えること:
をモデルクラスでは、私が追加:
私は追加ApplicationExtensions.csで次に
private static Model1 _instance;
public static Model1 Instance
{
get { return _instance; }
set { _instance = value; }
}
public static void CreateNew()
{
if (_instance == null)
{
_instance = new Model1();
_instance.FirstString = "init";
}
}
を:
public static void SaveToIsolatedStorage(this Application app, Model1 model)
{
var dataFileName = GetIsFile((model.GetType()));
using (var userAppStore =
IsolatedStorageFile.GetUserStoreForApplication())
{
if (userAppStore.FileExists(dataFileName))
{
userAppStore.DeleteFile(dataFileName);
}
using (var iss = userAppStore.CreateFile(dataFileName))
{
SilverlightSerializer.Serialize(model, iss);
}
}
}
そしてApp.xaml.csで、私は(LoadModelを変更)へ:
private void LoadModel()
{
try
{
Model1.Instance = this.RetrieveFromIsolatedStorage<Model1>();
}
catch (Exception) { }
if (Model1.Instance == null) Model1.CreateNew();
}
すべては私のViewModelファイルで、この作品のようなものをしたこと:
public string TestStr
{
get
{
return Model1.Instance.FirstString;
}
set
{
Model1.Instance.FirstString = value;
}
}
そして、それによって、私はModel1オブジェクトがシリアル化されていることを意味し、トーンブースティングはで動作しています - 少なくとも私は私が望むと思うものを得ています。私は、アプリ、電話の設定をナビゲートしたり、電話をオン/オフしたり、ロックしたり、別の電話からアプリ内で呼び出すことで、多くのことをテストしました。デシリアライズが優れている場合のパフォーマンスそして私はヴァルスと仕事ができます。
そう、「あなたはそれがないMVVMLight ViewModelBaseからサブクラス化された場合、その後、あなたはこのようなあなたのセッターからRaisePropertyChangedを呼び出す必要があります:_foobar =
プライベート文字列」:ヴァンSchaikがの支援のための要求に答えたのinit ";
パブリックストリングTestStr { {戻り_foobarを得る; }
set
{
RaisePropertyChanged("TestStr");
_foobar = value;
}
}
RaisePropert yChangedはすべてのリスニングビュー(つまり、あなたがそれにバインドしたTextBox)プロパティが変更され、その内容を更新する必要があります。これは重要なメカニズムである。」
だから私は、私はもともとそれが何をするか見しようとしているが、RaisePropertyChangedを加えていたもので動作します。
UPDATE
私はRaisedPropertyChangedを実装しますが(私のMainViewModel.csファイルでコードスニペットmvvminpcを使用していますが、ViewModel内で作成されたものをシリアル化しても効果はありません(他のものと同じように)。ビューモデルは保護されたクラス(answer from Laurent Bugnion)から継承するためです。 antly)はそのクラスをprotectedからpublicに変更して再コンパイルしようとしましたが、私の場合は役に立たなかったので、そのような参照されたライブラリをforkするのは嫌です。とにかく、App.xaml.cでModel1インスタンスを作成するだけです仕事をしているようだ。私はそれであったが、私は、任意の型のオブジェクトを受け入れるためにヴァンSchaikの方法のいずれかを変更:
public static void SaveToIsolatedStorage<T>(this Application app, T obj)
where T : class
{
var dataFileName = GetIsFile(typeof(T));
using (var userAppStore =
IsolatedStorageFile.GetUserStoreForApplication())
{
if (userAppStore.FileExists(dataFileName))
{
userAppStore.DeleteFile(dataFileName);
}
using (var iss = userAppStore.CreateFile(dataFileName))
{
SilverlightSerializer.Serialize(obj, iss);
}
}
}
あなたが正常に見えるれ、あなたの財産のためのコードを示しましたが、あなたは解決策の残りの部分を実装しています実際には 'Activated'と' Deactivated'イベントでビューモデルのインスタンスを直列化して逆直列化しますか? –
はい、あります。私はこのポストではっきりとしていたはずです。私は問題の一つに集中しようとしていました。 – Stonetip