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