0

作業中の Windows Phone 7 アプリのコントロール間でグローバルに共有したい情報を格納するシングルトン クラスを作成しました。

具体的には、データ バインディングを使用して、IsExpandedさまざまな Silverlight Toolkit ExpanderView 間でプロパティを同期しています。私が経験している問題は、値が伝達されないように見えることですが、物理的なWindows Phone デバイスでのみ...アプリはエミュレーターで正常に動作します。

このプロジェクトのシングルトン クラス以外のソースへのバインディングはすべて正常に動作しているため、バインディングおよび/またはシングルトンを正しく実装していないか、明らかな何かが欠けていると思います...しかし、このフォーラムおよび他のスレッドのすべてのスレッドはこの問題の解決に役立たないことを確認しました。

シングルトン クラスは次のとおりです。

class ControlStateContainer : INotifyPropertyChanged
{
    private static readonly ControlStateContainer _instance = new ControlStateContainer();
    private bool _optionsExpanded = false;

    private ControlStateContainer()
    { }

    public static ControlStateContainer Instance
    {
        get { return _instance; }
    }

    public bool OptionsExpanded
    {
        get { return _optionsExpanded; }
        set
        {
            _optionsExpanded = value;
            this.NotifyPropertyChanged("OptionsExpanded");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string name)
    {
        var handler = PropertyChanged;

        if (handler != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

IsExpandedそして、次のコードで ExpanderViewsのプロパティをバインドしています。

Binding _isExpandedBinding = new Binding
{
    Source = ControlStateContainer.Instance,
    Path = new PropertyPath("OptionsExpanded"),
    Mode = BindingMode.TwoWay
};

expander.SetBinding(ExpanderView.IsExpandedProperty, _isExpandedBinding);

ExpanderViews はエミュレーターで期待どおりに動作しますが、アプリをデバイスにデプロイすると、バインディングが機能しなくなったようです。

私はまだ C# と Windows Phone の開発全般にまったく慣れていないので、これが私が見逃した非常に単純な詳細であると完全に期待しています...何かアイデアはありますか?

4

1 に答える 1

1

どうやら、シングルトン クラスは明示的に宣言する必要があるようpublicです。これで、エミュレーターとデバイスの両方で動作します。

于 2013-03-28T11:42:08.980 に答える