2013-08-05 2 views
1

Почему этот код-Data DataBinding не работает, когда я делаю то же самое в XAML, он работает нормально.WPF Code-behind DataBinding не работает

Binding frameBinding = new Binding(); 
frameBinding.Source = mainWindowViewModel.PageName; 
frameBinding.Converter = this; // of type IValueConverter 
frameBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
frameBinding.IsAsync = true; 
frame.SetBinding(Frame.ContentProperty, frameBinding); 
+0

Связывание успешно. Когда установлено свойство PageName, также вызывается уведомление об изменении свойства. Но после этого он не обновляется. –

ответ

6

Вы только установить Source из Binding, но не его Path. Декларация должна выглядеть следующим образом, используя экземпляр mainWindowViewModel в Source:

Binding frameBinding = new Binding(); 
frameBinding.Path = new PropertyPath("PageName"); // here 
frameBinding.Source = mainWindowViewModel; // and here 
frameBinding.Converter = this; 
frameBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
frameBinding.IsAsync = true; 
frame.SetBinding(Frame.ContentProperty, frameBinding); 

или короче:

Binding frameBinding = new Binding 
{ 
    Path = new PropertyPath("PageName"), 
    Source = mainWindowViewModel, 
    Converter = this, 
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, 
    IsAsync = true 
}; 
frame.SetBinding(Frame.ContentProperty, frameBinding); 
+0

Это также ** не ** работает: frameBinding.Path = new PropertyPath ("."); frameBinding.Source = mainWindowViewModel.PageName; –