我用以下方式创建了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}"/>
然后,我在costructor中设置属性:
public SchoolChooser()
{
this.InitializeComponent();
this.SchoolsViewModel = new SchoolsViewModel { Schools = TypeService.Resolve<ISchoolContext>().Schools };
}
幸运的是,DataContext始终为null。在我看来,绑定不起作用。我不知道为什么,这样的方式在wpf中工作。
当我直接设置DataContext时:
this.DataContext = this.SchoolsViewModel;
一切都很好。为什么?虽然我实现了INotfiyProperyChanged,但事件ProperyChanged为空。
答案 0 :(得分:0)
您INotifyPropertyChanged
的{{1}}不需要DependencyProperty
。也许删除它可以让你更好地了解问题。
我想知道为什么你的View有viewmodel的属性。 viewmodel不应该进入DataContext吗?我希望你的View和ViewModel能够独立于另一个实例,比如创建两个对象的Application
,并通过将Views DataContext
设置为ViewModel实例来连接它们。
示例:
var view = new View();
var viewModel = new ViewModel();
view.DataContext = viewModel;
view.Show();