0

Я создал одноэлементный класс для хранения информации, которую хочу использовать глобально между элементами управления в приложении Windows Phone 7, над которым я работаю.Связывание данных с источником singleton работает только на эмуляторе Windows Phone, но не на устройстве

В частности, я использую привязку данных для синхронизации свойства IsExpanded между различными Silverlight Toolkit ExpanderViews. Проблема, с которой я столкнулся, заключается в том, что значение не распространяется, но только на физическом устройстве Windows Phone ... приложение отлично работает на эмуляторе.

Поскольку все другие привязки к источникам, отличным от класса singleton в этом проекте, работают нормально, я предположил, что я неправильно использовал привязку и/или синглтон, или я пропустил что-то очевидное ... но каждый поток на этом форуме и другие, которые я проверил, не помогли мне решить эту проблему.

Одноэлементный класс выглядит следующим образом:

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 в целом и полностью ожидаю, что это будет простенько простой деталью, которую я пропустил ... любые идеи?

+0

есть конкретная причина, по которой вы выполняете привязку в коде позади, а не XAML? –

+0

Ну, поскольку есть много расширителей, мне было проще создавать их программно, а затем перебирать их, чтобы установить привязки. Этот подход отлично подходит для всех моих других привязок, просто не уверен, почему этого не происходит в этом конкретном случае – easuter

ответ

1

По-видимому, класс singleton должен быть явно объявлен public ... теперь он работает как на эмуляторе, так и на устройстве.

Смежные вопросы