Я создал одноэлементный класс для хранения информации, которую хочу использовать глобально между элементами управления в приложении 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 в целом и полностью ожидаю, что это будет простенько простой деталью, которую я пропустил ... любые идеи?
есть конкретная причина, по которой вы выполняете привязку в коде позади, а не XAML? –
Ну, поскольку есть много расширителей, мне было проще создавать их программно, а затем перебирать их, чтобы установить привязки. Этот подход отлично подходит для всех моих других привязок, просто не уверен, почему этого не происходит в этом конкретном случае – easuter