Я использую стандартный шаблон поворота в своем приложении WP7.
У меня есть класс MainViewModel, определенный с несколькими дополнительными свойствами:
public class MainViewModel : INotifyPropertyChanged
{
...
private MyClass selectedKey_m;
public MyClass SelectedKey
{
get
{
...
}
set
{
if (value != this.selectedKey_m)
{
this.selectedKey_m = value;
NotifyPropertyChanged("SelectedKey");
}
}
}
}
Класс App имеет экземпляр модели представления:
private static MainViewModel viewModel = null;
public static MainViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
My MainPage.xaml.cs устанавливает DataContext:
DataContext = App.ViewModel;
Здесь я могу установить двухсторонние привязки в ListBoxes, и я знаю, что это работает, потому что, если я устанавливаю точку останова на свойство SelecetdKey в моей модели представления, я вижу, как вызывается установщик.
Моя проблема в том, что у меня есть собственный пользовательский элемент управления со свойством bindable, привязанный к свойству SelectedKey модели представления, но свойство в моем пользовательском элементе управления никогда не устанавливается, когда обновляется модель представления, и я не могу понять почему.
Вот мой пользовательский элемент управления:
public partial class MyUserControl : UserControl
{
public static readonly DependencyProperty SelectedKeyProperty = DependencyProperty.Register(
"SelectedKey", typeof(MyClass), typeof(MyUserControl), new PropertyMetadata(null));
public MyClass SelectedKey
{
get { return (MyClass)this.GetValue(SelectedKeyProperty); }
set { this.SetValue(SelectedKeyProperty, value); }
}
}
И вот xaml на моей главной странице:
<local:MyUserControl x:Name="myUC" SelectedKey="{Binding Path=SelectedKey}">
Я ожидаю, что установщик свойства SelectedKey моего пользовательского элемента управления будет вызываться при изменении свойства SelectedKey модели представления, но это не так.
Я также пытался установить текст данных моего пользовательского элемента управления в xaml:
DataContext="{Binding Path=App.ViewModel}"