1

XPSファイルから難読化されたフォントを取得してSilverlightで使用するために.odttfファイルを保存できるALPHAアプリケーションがあります。アプリケーションは、非常に大まかな方法​​ではありますが、缶に書かれていることを実行するのと同じように「機能」します。

このツールをクリーンアップしてベータ版を作成する過程で、問題を解決できます。どのフォントを使用するか、抽出したファイルをどこに保存するかなど、ユーザーからデータを収集するウィザードスタイルでアプリケーションをレイアウトしたいと思います。

現在の実装では、これはすべてコードビハインドで行われます(実際にはヘルパークラスを呼び出します)。ただし、ウィザードを実装するということは、データの各部分が異なる「ページ」に収集されることを意味します。コードをクリーンに保つことを目的としたMVVMを実装しようとしているため、ページコンストラクターを使用してデータを単純に渡すことはしたくありませんでした。

私が探しているのは、ウィンドウを永続化するコード内のデータストレージだと思います。そうすれば、ウィンドウ(ビュー)のデータを取得し、バインディングを介してビューモデルに渡し、ウィンドウモデル(データクラス)に送信してどこかに保存することができます。

データベースまたはXMLファイルを使用することもできますが、それは私が必要とするいくつかの情報のための強力なストレージのようです。

要約すると、ウィンドウ呼び出しを永続化し、複数のモデル(クラス)から参照できるメモリ内オブジェクトを作成する方法はありますか。

ありがとう!

4

2 に答える 2

2

データを保存し、すべてのビューからアクセスするための静的クラスまたはシングルトン?

于 2010-01-06T13:56:39.230 に答える
0

最善の方法は、すべてのページに同じ ViewModel を使用し、後で使用する場合はシリアル化することです。

public class MyViewModel
{
    // Properties to be serialized
    public string MyViewModelProperty1 = "";
    public string MyViewModelProperty2 = "";

    // Save to file.
    public virtual bool Save(string viewmodelFilePath)
    {
        try
        {
            Directory.CreateDirectory(Path.GetDirectoryName(viewmodelFilePath));
            StreamWriter write = new StreamWriter(viewmodelFilePath);
            XmlSerializer xml = new XmlSerializer(GetType());
            xml.Serialize(write, this);
            write.Close();
        }
        catch
        {
            return false;
        }
        return true;
    }

    // Load from file.
    public static object Load(Type type, string viewmodelFilePath)
    {
        StreamReader reader;
        object settings;
        XmlSerializer xml = new XmlSerializer(type);

        try
        {
            reader = new StreamReader(viewmodelFilePath);
            viewmodel = xml.Deserialize(reader);
            reader.Close();
        }
        catch
        {
            viewmodel = 
                type.GetConstructor(System.Type.EmptyTypes).Invoke(null);
        }
        return viewmodel;
    }
}

Petzold book の元のコード

于 2010-01-06T13:26:16.323 に答える