Привязка к DependencyProperty не работает
Я создал DP следующим образом:
public static readonly DependencyProperty SchoolsViewModelProperty =
DependencyProperty.Register("SchoolsViewModel", typeof(SchoolsViewModel), typeof(SchoolChooser), new PropertyMetadata(default(SchoolsViewModel)));
public SchoolsViewModel SchoolsViewModel
{
get
{
return (SchoolsViewModel)GetValue(SchoolsViewModelProperty);
}
set
{
SetValue(SchoolsViewModelProperty, value);
this.OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Далее я связываю его с DataContext:
<common:LayoutAwarePage
...
DataContext="{Binding ElementName=SchoolChooserPage, Path=SchoolsViewModel}"/>
Затем я устанавливаю свойство в конструкторе:
public SchoolChooser()
{
this.InitializeComponent();
this.SchoolsViewModel = new SchoolsViewModel { Schools = TypeService.Resolve<ISchoolContext>().Schools };
}
К сожалению, DataContext всегда нулевой. Мне кажется, что привязка не работает. Я понятия не имею, почему такой способ работал в wpf.
Когда я устанавливаю DataContext прямо как:
this.DataContext = this.SchoolsViewModel;
Все отлично. Зачем? Что, хотя я реализовал INotfiyProperyChanged, событие ProperyChanged равно нулю.
1 ответ
Вам не нужно INotifyPropertyChanged
с DependencyProperty
s. Может быть, удаление этого даст вам лучший взгляд на проблему.
Интересно, почему в вашем View есть свойство для модели представления. Разве модель представления не должна входить в DataContext? Я ожидаю, что ваши View и ViewModel будут независимы с другим экземпляром, таким как Application
создавая оба объекта и соединяя их, устанавливая виды DataContext
к экземпляру ViewModel.
Пример:
var view = new View();
var viewModel = new ViewModel();
view.DataContext = viewModel;
view.Show();