3

WinForms で行われたプログラムを WPF にリファクタリングしています。MVVM パターンを実装するためのフレームワークとして Caliburn.Micro を使用しています。

古いプログラムでは、StatisHelperクラスを使用して、テーマ、言語、ユーザー名、アクセス権などのさまざまな静的変数を許可しています..

これらの変数は公開されているため、安全でない可能性があることはわかっていますが、エンド ユーザーがこれらの値にアクセスする方法を知っているとは思えません...

とにかく、すべてのビューモデルにアクセスできるグローバル値(具体的には、Caliburn.Micro フレームワークを使用しています)を保存するための MVVM のベストプラクティスを知りたいです。

ご回答ありがとうございます。

4

3 に答える 3

3

シングルトンクラスを使用できます(一部の人は眉をひそめています)。privateコンストラクターはであるため、他にインスタンスを作成できないことに注意してください。Instanceプロパティを使用してアクセスします。この例のInstanceプロパティは、最初にアクセスされたときにのみシングルトン オブジェクトを構築します。

それを使用するには、単に次のようにしvar foo = Globals.Instance.SomePropertyます。

これは WPF や MVVM とは関係なく、WinForms でも使用できた可能性があることに注意してください。

public class Globals {
    private Globals _Instance;
    public Globals Instance {
        get {
            if (_Instance == null)
                _Instance = new Globals();
            return _Instance;
        }
    }

    private Globals() {
    }

    public string SomeProperty { get; set; }
}
于 2013-10-17T14:12:51.470 に答える
3

パターンを実装するカスタムStateManagerクラスを使用Singletonして、アプリケーションにこれらのインスタンスが 1 つだけ存在するようにします。

public class StateManager : INotifyPropertyChanged
{
    private static StateManager instance = new StateManager();

    /// <summary>
    /// Initialises a new empty StateManager object.
    /// </summary>
    public StateManager() { }

    /// <summary>
    /// Gets the single available instance of the application StateManager object.
    /// </summary>
    public StateManager Instance
    {
        get { return instance; }
    }

    ...
}

これはベース ビュー モデルで参照されるため、すべてのビュー モデルがアクセスできます。

public StateManager StateManager
{
    get { return stateManager.Instance; }
}

さらに、ビュー モデル クラスで参照されているためBind、XAML で値を参照することもできます。

<Window Title="{Binding StateManager.WindowTitle, Mode=OneWay}" ... />
于 2013-10-17T14:14:18.070 に答える