绑定到DependencyProperty不起作用

时间:2013-05-03 07:33:57

标签: c# microsoft-metro

我用以下方式创建了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为空。

1 个答案:

答案 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();