2010-04-23 86 views
3

我可以使用数据绑定来设置WPF框架的初始内容,但对绑定属性的后续更改(使用INotifyPropertyChange实现)似乎不会更改内容。你可以使用WPF框架的Content属性进行数据绑定吗?

此外,有没有人知道如果以这种方式直接绑定到Content属性将导致绑定项目出现在框架或NavigationWindow的日记?

一些背景:我意识到我应该使用NavigationService与框架进行交互,但我试图遵循MVVM模式。数据绑定到Content属性似乎更简单...

回答

3

许多WPF社区同意内置的导航框架被破坏。但是,即使您要使用它,绑定Content属性也不是正确的方法。如果您想要将MVVM与导航一起使用,您应该将其与FrontController模式结合使用,ViewModel会将一个导航请求分派给Controller,然后Controller将为您解析该请求。这个概念的例子并不多,因为(正如我之前提到的)许多开发人员都使用WPF的内置导航。

如果你想看看一个非常强大的WPF导航引擎,look at nRoute它是WPF的MVC路由引擎的一个端口。

0

Frame是导航主机,因此使用NavigationService导航到不同的内容会更加正确。如果你使用INotifyPropertyChange,我想你会在内容改变时调用相关的事件。然后,我还假设不难使用NavigationService。

5

您可以对Frame使用数据绑定,但您需要确保您的绑定模式设置为TwoWay。

XAML:

<Frame Content={Binding Path=MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} /> 

视图模型:

public class MyViewModel : INotifyPropertyChanging, INotifyPropertyChanged 
{ 
    public Page MyProperty 
    { 
    get 
    { 
     return _viewModelPage; 
    } 

    set 
    { 
     this.OnPropertyChanging("MyProperty"); 
     _viewModelPage = value; 
     this.OnPropertyChanged("MyProperty"); 
    } 
    } 
} 
0

我前几天就遇到了这个问题。我有一个带有框架的主窗口,并且我在框架中加载了不同的页面(通过使用Navigate())。页面的数据绑定被破坏,数据没有显示在加载的页面上。

要修复绑定,请创建或将现有DataContext添加到框架内的页面,并且绑定将再次运行。

相关问题