我可以使用数据绑定来设置WPF框架的初始内容,但对绑定属性的后续更改(使用INotifyPropertyChange实现)似乎不会更改内容。你可以使用WPF框架的Content属性进行数据绑定吗?
此外,有没有人知道如果以这种方式直接绑定到Content属性将导致绑定项目出现在框架或NavigationWindow的日记?
一些背景:我意识到我应该使用NavigationService与框架进行交互,但我试图遵循MVVM模式。数据绑定到Content属性似乎更简单...
我可以使用数据绑定来设置WPF框架的初始内容,但对绑定属性的后续更改(使用INotifyPropertyChange实现)似乎不会更改内容。你可以使用WPF框架的Content属性进行数据绑定吗?
此外,有没有人知道如果以这种方式直接绑定到Content属性将导致绑定项目出现在框架或NavigationWindow的日记?
一些背景:我意识到我应该使用NavigationService与框架进行交互,但我试图遵循MVVM模式。数据绑定到Content属性似乎更简单...
许多WPF社区同意内置的导航框架被破坏。但是,即使您要使用它,绑定Content属性也不是正确的方法。如果您想要将MVVM与导航一起使用,您应该将其与FrontController模式结合使用,ViewModel会将一个导航请求分派给Controller,然后Controller将为您解析该请求。这个概念的例子并不多,因为(正如我之前提到的)许多开发人员都使用WPF的内置导航。
如果你想看看一个非常强大的WPF导航引擎,look at nRoute它是WPF的MVC路由引擎的一个端口。
Frame是导航主机,因此使用NavigationService导航到不同的内容会更加正确。如果你使用INotifyPropertyChange,我想你会在内容改变时调用相关的事件。然后,我还假设不难使用NavigationService。
您可以对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");
}
}
}
我前几天就遇到了这个问题。我有一个带有框架的主窗口,并且我在框架中加载了不同的页面(通过使用Navigate()
)。页面的数据绑定被破坏,数据没有显示在加载的页面上。
要修复绑定,请创建或将现有DataContext
添加到框架内的页面,并且绑定将再次运行。